1.安裝
我使用的是PC.Lint.v8.00e,是不用安裝的版本。
解開到E:PC.Lint.v8.00e目錄,可執行文件為Lint.exe(lint-nt.exe與其相同,可能為NT平台用的,在Win2000下都可運行)。
子目錄lnt內是檢查的規則及選項文件,這兩種文件擴展名全為.lnt。
2.准備自己工程的選項文件
在E:PC.Lint.v8.00elnt下新建MyProj.lnt文本文件,我們將自己工程的很多頭文件目錄,在其中一一列出來,內容如下:
std.lnt/*注釋:包含的規則和/或選項文件*/
env-vc6.lnt
/*下面為各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
-i"C:MyProjIncludeA" -i"C:MyProjIncludeB" -iC:MyProjIncludeC
-iC:MyProjIncludeD
-e641//另一種注釋//這是省略#641錯誤
【注意】指明各頭文件目錄很重要。頭文件各目錄的名稱可能在VC的ProjectProject SettingsProject Options欄中:
/I "/Include/PS",可供借鑒(相對路徑暫未測試)。
當後面運行Lint時出現無法打開某個頭文件時,需要不斷添加頭文件所在目錄的名稱到本選項文件中。
3.在VC中運行PCLint(針對單個文件但需包含多個頭文件目錄):
A 點擊Tools/Customize/Tools出現定制窗口
B 在Menu contents中雙擊下面的空白攔,輸入擬新增的Tool名稱:PCLint
C 雙擊PClint項,在Command中填入要調用的.exe文件名:lint
Arguments:中填入:-i"E:PC.Lint.v8.00elnt" MyProj.lnt $(FilePath)
【注意】$(FilePath)這個字串是個宏名,也可以通過點擊右邊的三角箭頭選擇;可能為要檢查的本文件的路徑加文件名,而
不能是$(FileName)!!!因為它可能只是文件名而不帶路徑,將導致使用時說無法發現!
另外,MyProj.lnt這個選項文件必須在$(FilePath)之前。
Initial Directory項:在Arguments項中若缺少-i"E:PC.Lint.v8.00elnt"時將報無法找到各個.lnt文件,可在此
欄填E:PC.Lint.v8.00elnt來指定。
選中"Use Output Window" (這將使PCLint運行的結果在VC下方Output窗口中,雙擊行號還可以跳到指定行)
D 打開一個項目,讓焦點位於某個源程序編輯窗口,點擊Tools/pclint菜單即可
【注意】直到VC Output窗口中出現Tool returned code: ,才算Tool運行完,若未運行完,可能在再點擊PCLint時報錯。
4.網上搜到的VC環境多個文件同時Lint的方法,大致為找到各個.c文件,將各文件名經xargs傳給lint來實現。但需要find,xargs等
命令,似乎需要模擬unix環境的軟件支持中才有,我裝的Cygwin的環境中對find命令後的格式有問題,無法支持unix中的
find . -name *.c,故無法由此找到各個.c文件名。但可以用Cygwin的ls命令來代替find。
【原方法如下:】
A 點擊Tools/Customize/Tools出現定制窗口
B 在Menu contents中雙擊空白攔,輸入:PCLint-project
C 雙擊PCLint-project項,在Command:中填入:find
Arguments:中填入:$(FileDir) -name *.c | xargs pclint -i"c:unixusr" -u std.lnt env-vc6.lnt
選中"Use Output Window"
D 打開一個項目,讓焦點位於最項層目前的一個Source Window中,點擊Tools/PCLint-project菜單即可
【方法1如下:】
A 點擊Tools/Customize/Tools出現定制窗口
B 在Menu contents中雙擊空白攔,輸入:PCLint-Proj
C 雙擊PCLint-Proj項,在Command:中填入:ls
Arguments:中填入:*.c |xargs lint -i"E:PC.Lint.v8.00elnt" MyProj.lnt
Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:PC.Lint.v8.00elnt")
選中"Use Output Window"
D 打開一個項目,讓焦點位於最頂層目前的一個Source Window中,點擊Tools/PCLint-Proj菜單即可
【最簡單的方法如下:】
A 在MyProj.lnt末尾添加一行 *.c (即目標為本目錄下所有.c文件)
B 點擊Tools/Customize/Tools出現定制窗口
C 在Menu contents中雙擊空白攔,輸入:PCLint-Proj
D 雙擊PCLint-Proj項,在Command:中填入:lint
Arguments:中填入:-i"E:PC.Lint.v8.00elnt" MyProj.lnt
Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:PC.Lint.v8.00elnt")
選中"Use Output Window"
E 打開一個項目,讓焦點位於最項層目前的一個Source Window中,點擊Tools/PCLint-Proj菜單即可
【注意】上述方法中的ls,xargs等命令位於Cygwin的目錄中,需要將路徑添加到系統的PATH中:
"我的電腦"(右擊鼠標)->"屬性"->"高級"->"環境變量"->"系統變量"->"Path"
加入"C:cygwinin"重啟生效。
ls *.c將同時找到.c文件和.cpp文件,但是也會將非工程所需的.c文件編譯進來,需要手工把文件轉走。
另外,這種方法一次只能Lint一個目錄,每完成一個目錄就要重新設置Initial Directory項為新的要檢查的目錄。
5.在DOS窗口中對一個目錄多個文件進行Lint
1)基於Cygwin
cd C:MyProJSrcA
ls *.c | xargs lint -i"E:PC.Lint.v8.00elnt" MyProj.lnt >> LintOutput.txt
【注意】ls *.c 也可以用DOS命令dir *.c/B來替換,/B的意思是僅列出各文件名。>>LintOutput.txt的意思是將Lint結果輸出到
LintOutput.txt文件中。
2)無Cygwin支持
cd C:MyProJSrcA
dir *.c /B
將所有列出的.c文件名稱復制到E:PC.Lint.v8.00elntMyProj.lnt中,內容如下:
std.lnt/*注釋:包含的規則和/或選項文件*/
env-vc6.lnt
/*下面為各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
-i"C:MyProjIncludeA" -i"C:MyProjIncludeB" -iC:MyProjIncludeC
-iC:MyProjIncludeD
-e641//另一種注釋//這是省略#641錯誤
a.c //指定要Lint的文件
b.c
c.c
最後幾行指定的要Lint之文件也可以用通配符,如:
*.c
然後直接運行 lint -i"E:PC.Lint.v8.00elnt" MyProj.lnt >> LintOutput.txt