【原創】VC中多文件工程的PCLint使用詳解

2006-4-14 Lander 整理
介紹:對於多個源程序文件且多個頭文件目錄的項目進行PCLint語法檢查。

1.安裝
 我使用的是PC.Lint.v8.00e,是不用安裝的版本。
 解開到E:/PC.Lint.v8.00e目錄,可執行文件爲Lint.exe(lint-nt.exe與其相同,可能爲NT平臺用的,在Win2000下都可運行)。
 子目錄lnt內是檢查的規則及選項文件,這兩種文件擴展名全爲.lnt。

2.準備自己工程的選項文件
 在E:/PC.Lint.v8.00e/lnt下新建MyProj.lnt文本文件,我們將自己工程的很多頭文件目錄,在其中一一列出來,內容如下:
 
 std.lnt/*註釋:包含的規則和/或選項文件*/
 env-vc6.lnt
 /*下面爲各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
 -i"C:/MyProj/IncludeA" -i"C:/MyProj/IncludeB" -iC:/MyProj/IncludeC
 -iC:/MyProj/IncludeD
 -e641//另一種註釋//這是省略#641錯誤
 【注意】指明各頭文件目錄很重要。頭文件各目錄的名稱可能在VC的Project/Project Settings/Project 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.00e/lnt" MyProj.lnt $(FilePath)
      【注意】$(FilePath)這個字串是個宏名,也可以通過點擊右邊的三角箭頭選擇;可能爲要檢查的本文件的路徑加文件名,而
      不能是$(FileName)!!!因爲它可能只是文件名而不帶路徑,將導致使用時說無法發現!
      另外,MyProj.lnt這個選項文件必須在$(FilePath)之前。
      Initial Directory項:在Arguments項中若缺少-i"E:/PC.Lint.v8.00e/lnt"時將報無法找到各個.lnt文件,可在此
      欄填E:/PC.Lint.v8.00e/lnt來指定。
      選中"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:/unix/usr" -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.00e/lnt" MyProj.lnt
      Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:/PC.Lint.v8.00e/lnt")
      選中"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.00e/lnt" MyProj.lnt
      Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:/PC.Lint.v8.00e/lnt")
      選中"Use Output Window"
  E 打開一個項目,讓焦點位於最項層目前的一個Source Window中,點擊Tools/PCLint-Proj菜單即可

【注意】上述方法中的ls,xargs等命令位於Cygwin的目錄中,需要將路徑添加到系統的PATH中:
  "我的電腦"(右擊鼠標)->"屬性"->"高級"->"環境變量"->"系統變量"->"Path"
    加入"C:/cygwin/bin"重啓生效。
 ls *.c將同時找到.c文件和.cpp文件,但是也會將非工程所需的.c文件編譯進來,需要手工把文件轉走。
 另外,這種方法一次只能Lint一個目錄,每完成一個目錄就要重新設置Initial Directory項爲新的要檢查的目錄。

5.在DOS窗口中對一個目錄多個文件進行Lint
1)基於Cygwin
cd C:/MyProj/SrcA/
ls *.c | xargs lint -i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt >> LintOutput.txt
【注意】ls *.c 也可以用DOS命令dir *.c/B來替換,/B的意思是僅列出各文件名。>>LintOutput.txt的意思是將Lint結果輸出到
LintOutput.txt文件中。
2)無Cygwin支持
cd C:/MyProj/SrcA/
dir *.c /B
將所有列出的.c文件名稱複製到E:/PC.Lint.v8.00e/lnt/MyProj.lnt中,內容如下:
 std.lnt/*註釋:包含的規則和/或選項文件*/
 env-vc6.lnt
 /*下面爲各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
 -i"C:/MyProj/IncludeA" -i"C:/MyProj/IncludeB" -iC:/MyProj/IncludeC
 -iC:/MyProj/IncludeD
 -e641//另一種註釋//這是省略#641錯誤
 a.c //指定要Lint的文件
 b.c
 c.c
 最後幾行指定的要Lint之文件也可以用通配符,如:
 *.c
然後直接運行 lint -i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt >> LintOutput.txt

發佈了32 篇原創文章 · 獲贊 3 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章