




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
精選優(yōu)質(zhì)文檔傾情為你奉上精選優(yōu)質(zhì)文檔傾情為你奉上專心專注專業(yè)專心專注專業(yè)精選優(yōu)質(zhì)文檔傾情為你奉上專心專注專業(yè)PC-lint研究總結(jié)TOC1. PC-lint總體介紹 圖在ProjectManager中的源文件上點擊鼠標(biāo)右鍵,選擇Lint就開始檢查選中的文件了,輸出信息在Build窗口。圖3.2.2.5集成到SI中SourceInsight的集成方法參見C:\Lint8\lnt\env-si.lnt中的注釋。從Options菜單中選擇“Custom
Commands”命令項。點擊Add…。在Name欄中輸入“PC-lint
unitcheck”,原則上這個名稱可以隨便起,只要你能搞清楚它的含義就可以了。在Run欄中輸入“C:\Lint8\lint-nt
-u
-iC:\Lint8\
std
env-si
%f”其中C:\Lint8是你PC-LINT的安裝目錄。在Output欄中選擇“Iconic
Window”、“Capture
Output”。在Control欄中選擇“Save
Files
First”。在Source
Links
in
Output欄中選擇“Parse
Links
in
Output”、“File,then
Line”。在Pattern欄中輸入“^\([^
]*\)
\([0-9]+\)”。點Close鍵加入該命令。如下圖:圖3.2.3.1使用時,在Source
Insight下打開要LINT的文件,打開Options菜單中的“Custom
Commands”命令項,在“Command”欄中選擇“PC-lint
unit
check”命令運行即可。請注意,不論你怎樣配置參數(shù)一定不要忘記了將env-si.lnt包含在你的配置文件里,否則就無法進(jìn)行錯誤信息和程序的自動對應(yīng)了。用Menu命令把PC_Lint添加到菜單中。圖3.2.3.2至此,你可以運行sourceinsight下集成的PC-Lint功能完成對代碼的走查,并且很方便的找到錯誤信息的位置。圖3.2.3.3在錯誤信息處點擊旁邊的紅色圖標(biāo),就會自己跳轉(zhuǎn)至錯誤出現(xiàn)處。上圖就是一個不安全變量轉(zhuǎn)換的警告信息。以上是對在sourceinsight3.5中使用集成PC-lint的一個總結(jié)。我們可以看到該方式使用PC-lint簡單易用,容易查找到錯誤,但考慮只能做當(dāng)前文件的單元檢查,需要自己指定Include目錄和需要自己定義相關(guān)的宏等,設(shè)置過程比較麻煩,并且不夠通用。此方式適合個人維護(hù)自己的代碼用,對于整個部門的代碼的走查,還是采取makefile的方式比較好。集成到UE中圖3.2.4.1(1)從UltraEdit的<高級>菜單中進(jìn)入<工具配置>(2)<菜單項目名>欄輸入“PC-lintunitcheck”(3)<命令行>欄輸入以下命令:C:\PCLint8\LINT-NT–u-iC:\PCLint8\si\stdenv-si%f其中,C:\PCLint8是PC-Lint的安裝目錄(4)<工作目錄>欄輸入以下路徑:x:\code(5)選中<先保存所有文件>的復(fù)選框(6)在<命令輸出>欄中,選中<輸出到列表>和<捕捉輸出>(7)點<插入>將命令行插入UltraEdit的菜單,此時在UltraEdit的<高級>菜單中會增加一個<PC-lintunitcheck>欄目,點擊該欄目即可對當(dāng)前文件執(zhí)行PC-lint。檢查的執(zhí)行結(jié)果如下圖所示:圖3.2.4.2makefile方式這里makefile指的是一類文件,用在C/C++的Make工具中,Make工具通過makefile文件來描述源程序之間的相互關(guān)系,并自動維護(hù)編譯工作。Makefile文件按照特定的語法進(jìn)行編寫,文件中需要說明如何編譯各個源文件,并連接生成可執(zhí)行文件。Makefile文件作為一種描述文檔一般需要包含以下內(nèi)容:
◆宏定義
◆源文件之間的相互依賴關(guān)系
◆可執(zhí)行的命令
Makefile中允許使用簡單的宏指代源文件及其相關(guān)編譯信息,也稱宏為變量。在引用宏時只需在變量前加$符號,但值得注意的是,如果變量名的長度超過一個字符,在引用時就必須加圓括號()。平臺目前使用的Make工具是Tornado集成環(huán)境中的自帶的make.exe(一般位于Tornado安裝目錄\host\x86-win32\bin),它實際上是GNUMakeversion3.74(vpath+),以上的版本信息具體情況可能會略有不同,可以通過make–v來查看。那么,在說明平臺的makefile結(jié)構(gòu)和如何將PC-lint結(jié)合到makefile中使用之前,先來介紹GNUMake及makefile。GNUMake和makefile介紹GNUMake在大型的開發(fā)項目中,通常有幾十到上百個的源文件,如果每次均手工鍵入gcc命令進(jìn)行編譯的話,則會非常不方便。因此,人們通常利用make工具來自動完成編譯工作。這些工作包括:如果僅修改了某幾個源文件,則只重新編譯這幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。利用這種自動編譯可大大簡化開發(fā)工作,避免不必要的重新編譯。實際上,make工具通過一個稱為makefile的文件來完成并自動維護(hù)編譯工作。makefile需要按照某種語法進(jìn)行編寫,其中說明了如何編譯各個源文件并連接生成可執(zhí)行文件,并定義了源文件之間的依賴關(guān)系。當(dāng)修改了其中某個源文件時,如果其他源文件依賴于該文件,則也要重新編譯所有依賴該文件的源文件。makefile文件是許多編譯器,包括WindowsNT下的編譯器維護(hù)編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,用戶通過友好的界面修改makefile文件而已。默認(rèn)情況下,GNUmake工具在當(dāng)前工作目錄中按如下順序搜索makefile:*GNUmakefile*makefile*Makefile在UNIX系統(tǒng)中,習(xí)慣使用Makefile作為makfile文件。如果要使用其他文件作為makefile,則可利用類似下面的make命令選項指定makefile文件:$make-fMakefile.debugmakefile基本結(jié)構(gòu)makefile中一般包含如下內(nèi)容:*需要由make工具創(chuàng)建的項目,通常是目標(biāo)文件和可執(zhí)行文件。通常使用“目標(biāo)(target)”一詞來表示要創(chuàng)建的項目。*要創(chuàng)建的項目依賴于哪些文件。*創(chuàng)建每個項目時需要運行的命令。例如,假設(shè)你現(xiàn)在有一個C/C++源文件test.C,該源文件包含有自定義的頭文件test.h,則目標(biāo)文件test.o明確依賴于兩個源文件:test.C和test.h。另外,你可能只希望利用g++命令來生成test.o目標(biāo)文件。這時,就可以利用如下的makefile來定義test.o的創(chuàng)建規(guī)則:#Thismakefilejustisaexample.#Thefollowinglinesindicatehowtest.odepends#test.Candtest.h,andhowtocreatetest.otest.o:test.Ctest.hg++-c-gtest.C從上面的例子注意到,第一個字符為#的行為注釋行。第一個非注釋行指定test.o為目標(biāo),并且依賴于test.C和test.h文件。隨后的行指定了如何從目標(biāo)所依賴的文件建立目標(biāo)。當(dāng)test.C或test.h文件在編譯之后又被修改,則make工具可自動重新編譯test.o,如果在前后兩次編譯之間,test.C和test.h均沒有被修改,而且test.o還存在的話,就沒有必要重新編譯。這種依賴關(guān)系在多源文件的程序編譯中尤其重要。通過這種依賴關(guān)系的定義,make工具可避免許多不必要的編譯工作。當(dāng)然,利用Shell腳本也可以達(dá)到自動編譯的效果,但是,Shell腳本將全部編譯任何源文件,包括哪些不必要重新編譯的源文件,而make工具則可根據(jù)目標(biāo)上一次編譯的時間和目標(biāo)所依賴的源文件的更新時間而自動判斷應(yīng)當(dāng)編譯哪個源文件。一個makefile文件中可定義多個目標(biāo),利用maketarget命令可指定要編譯的目標(biāo),如果不指定目標(biāo),則使用第一個目標(biāo)。通常,makefile中定義有clean目標(biāo),可用來清除編譯過程中的中間文件,例如:clean:rm-f*.o運行makeclean時,將執(zhí)行rm-f*.o命令,最終刪除所有編譯過程中產(chǎn)生的所有中間文件。makefile變量GNU的make工具除提供有建立目標(biāo)的基本功能之外,還有許多便于表達(dá)依賴性關(guān)系以及建立目標(biāo)的命令的特色。其中之一就是變量或宏的定義能力。如果你要以相同的編譯選項同時編譯十幾個C源文件,而為每個目標(biāo)的編譯指定冗長的編譯選項的話,將是非常乏味的。但利用簡單的變量定義,可避免這種乏味的工作:#DefinemacrosfornameofcompilerCC=gcc#DefineamacrofortheCCflagsCCFLAGS=-D_DEBUG-g-m486#Aruleforbuildingaobjectfiletest.o:test.ctest.h$(CC)-c$(CCFLAGS)test.c在上面的例子中,CC和CCFLAGS就是make的變量。GNUmake通常稱之為變量,而其他UNIX的make工具稱之為宏,實際是同一個東西。在makefile中引用變量的值時,只需變量名之前添加$符號,如上面的$(CC)和$(CCFLAGS)。GNUmake的主要預(yù)定義變量GNUmake有許多預(yù)定義的變量,這些變量具有特殊的含義,可在規(guī)則中使用。表1-5給出了一些主要的預(yù)定義變量,除這些變量外,GNUmake還將所有的環(huán)境變量作為自己的預(yù)定義變量。表1-5GNUmake的主要預(yù)定義變量預(yù)定義變量含義$*不包含擴(kuò)展名的目標(biāo)文件名稱。$+所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。$<第一個依賴文件的名稱。$?所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚。$@目標(biāo)的完整名稱。$^所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件。$%如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。例如,如果目標(biāo)名稱為mytarget.so(image.o),則$@為mytarget.so,而$%為image.o。AR歸檔維護(hù)程序的名稱,默認(rèn)值為ar。ARFLAGS歸檔維護(hù)程序的選項。AS匯編程序的名稱,默認(rèn)值為as。ASFLAGS匯編程序的選項。CCC編譯器的名稱,默認(rèn)值為cc。CFLAGSC編譯器的選項。CPPC預(yù)編譯器的名稱,默認(rèn)值為$(CC)-E。CPPFLAGSC預(yù)編譯的選項。CXXC++編譯器的名稱,默認(rèn)值為g++。CXXFLAGSC++編譯器的選項。FCFORTRAN編譯器的名稱,默認(rèn)值為f77。FFLAGSFORTRAN編譯器的選項。隱含規(guī)則GNUmake包含有一些內(nèi)置的或隱含的規(guī)則,這些規(guī)則定義了如何從不同的依賴文件建立特定類型的目標(biāo)。GNUmake支持兩種類型的隱含規(guī)則:*后綴規(guī)則(SuffixRule)。后綴規(guī)則是定義隱含規(guī)則的老風(fēng)格方法。后綴規(guī)則定義了將一個具有某個后綴的文件(例如,.c文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o文件)的方法。每個后綴規(guī)則以兩個成對出現(xiàn)的后綴名定義,例如,將.c文件轉(zhuǎn)換為.o文件的后綴規(guī)則可定義為:.c.o:$(CC)$(CFLAGS)$(CPPFLAGS)-c-o$@$<*模式規(guī)則(patternrules)。這種規(guī)則更加通用,因為可以利用模式規(guī)則定義更加復(fù)雜的依賴性規(guī)則。模式規(guī)則看起來非常類似于正則規(guī)則,但在目標(biāo)名稱的前面多了一個%號,同時可用來定義目標(biāo)和依賴文件之間的關(guān)系,例如下面的模式規(guī)則定義了如何將任意一個X.c文件轉(zhuǎn)換為X.o文件:%.c:%.o$(CC)$(CFLAGS)$(CPPFLAGS)-c-o$@$<平臺的makefile結(jié)構(gòu)平臺的makefile文件也稱為工程文件,主要由名為makefile和*.mak的兩類文件構(gòu)成。平臺的makefile文件可以分為兩個等級:平臺級和子系統(tǒng)級。平臺級的makefile是生成最終的執(zhí)行代碼的工程文件,它還需要調(diào)用源程序體系中的子系統(tǒng)級的工程文件(或更深級別的工程文件)來最終完成自己的工作,它一般位于一級目錄中的PROJECT目錄。子系統(tǒng)級的makefile,主要是根據(jù)不同的編譯選項來生成各種類型的目標(biāo)文件(例如、各種邏輯單板的DEBUG、RELEASE版),它一般分布在一級目錄CODE的各子系統(tǒng)、模塊的目錄中。它所需的各種選項由平臺級的工程文件傳遞下來。PROJECT目錄的組織規(guī)則是按照網(wǎng)元、物理單板和邏輯單板三層組織結(jié)構(gòu)進(jìn)行組織的。對于網(wǎng)元級目錄,目前包括:BSC、PCF、AGW、HA、RNC、WCN,分別用來存放BSC、PCF、AGW、HA、RNC、WCDMACN的版本。對于物理單板級,沒有工程文件,在其下按照該物理單板支持的邏輯單板創(chuàng)建相應(yīng)的邏輯單板的目錄,對于一種物理單板,可能有多種邏輯單板,或者多種邏輯單板的合一版本。在本目錄中,存放所有的邏輯單板以及一些典型的合一單板的目錄。對于邏輯單板級,存放的是相應(yīng)邏輯單板的工程文件。平臺級在Project目錄下,有下列文件。CalculateCompilePara.mak:計算各種CPU的編譯參數(shù),包括字節(jié)序和編譯器的路徑等。CheckParam.mak:輸入?yún)?shù)的合法性檢查。CpuCompileOptionConfig.mak:配置各種CPU的編譯選項。DivisionPlatCompileControl.mak:用于配置編譯平臺或者事業(yè)部的選項。LinkMultiCPUBoard.bat:用于有多個CPU時對每個CPU連接可執(zhí)行文件。LinkOneCPUVersion.mak:用于連接特定序號的CPU的可執(zhí)行文件。Makefile:頂級makefile,被makenet.bat調(diào)用,用于編譯所有的網(wǎng)元的所有單板。MakeNet.bat:編譯網(wǎng)元的批處理文件。MakeOneCpuType.mak:用于支持多種CPU子卡的編譯MakeOneNet.mak:被makefile調(diào)用,用于編譯一個指定網(wǎng)元的所有單板。MakeSubsystem.mak:用于編譯指定的子系統(tǒng)NetCommon.mak:調(diào)用RunMake.bat完成對一塊單板的編譯,并提供對單個子系統(tǒng)進(jìn)行編譯時的入口。PlatCfg.mak:平臺的配置文件,其中配置了平臺支持的物理板、邏輯板、CPU等。PlatLink.mak:鏈接文件。Pub.mak:調(diào)用相關(guān)子系統(tǒng)的makefile,以便進(jìn)行編譯。RunMake.bat:完成對Tornado路徑的自動切換,并且調(diào)用Pub.mak開始編譯。VersionInfoConfig.mak:用于配置版本的信息,包括版本的路徑以及版本號等。子系統(tǒng)級(以支撐為例)在./code/oss目錄下,有下列文件。OssCfg.mak——支撐子系統(tǒng)的配置文件。Oss.mak——支撐子系統(tǒng)的頂級makefile。對于支撐的各個子模塊,各有一個以后綴名為.mak的文件,負(fù)責(zé)自身文件的編譯過程。一共包含下面幾個文件:./code/pub/pub.mak——平臺級公用部分。./code/oss/Common/Common.mak——子撐子系統(tǒng)對內(nèi)的公用部分。./code/oss/File/File.mak——文件子模塊./code/oss/Device/Device.mak——設(shè)備子模塊。./code/oss/Excep/Excep.mak——異常子模塊。./code/oss/Comm/Comm.mak——通信子模塊。./code/oss/Mem/Mem.mak——內(nèi)存子模塊./code/oss/Pub/Pub.mak——支撐子系統(tǒng)對外的公用部分。./code/oss/Sche/Sche.mak——調(diào)度子模塊。./code/oss/SDL/SDL.mak——SDL子模塊。./code/oss/Timer/Timer.mak——定時器子模塊。./code/oss/VOS/VOS.mak——Vos子模塊。平臺makefile的調(diào)用方式這里以UPCF單板、OSS子系統(tǒng)、COMMON子模塊為例進(jìn)行說明。假設(shè)我們要編譯UPCF單板的OSS子系統(tǒng),最終生成名為Oss_SubsysEx.o的目標(biāo)文件。程序目錄已被映射為X:盤。TornadoforArm已安裝在D:\Tornado\Arm目錄下。進(jìn)入X:\Project目錄,調(diào)用tenv.bat參數(shù)為arm設(shè)置相應(yīng)的環(huán)境變量;進(jìn)入X:\project\PCF\mnic\upcf目錄,調(diào)用make.exe參數(shù)為Oss開始編譯;make自動搜索到當(dāng)前目錄下的makefile文件,開始執(zhí)行編譯;makefile除設(shè)置版本、CPU、單板等變量外,包含進(jìn)../../PlatNetelementCfg.mak等文件;PlatNetelementCfg.mak除設(shè)置網(wǎng)元變量外,包含進(jìn)
$(_PROJECT_PATH)/netcommon.mak文件;netcommon.mak計算CPU的數(shù)量,并通過命令的方式執(zhí)行
$(_PROJECT_PATH)/MakeOneCpuIndex.mak;MakeOneCpuIndex.mak根據(jù)CPU的類型調(diào)用RunMake.bat并把所需的參數(shù)傳遞給該批處理;RunMake.bat執(zhí)行
callmake-C%make_project_path%-fPub.mak%make_subsystem%調(diào)入Pub.mak并把子系統(tǒng)參數(shù)Oss傳遞給它;Pub.mak根據(jù)參數(shù)Oss執(zhí)行相應(yīng)的部分
@$(MAKE)-C$(_SOURCE_PATH)/oss-foss.mak調(diào)用程序級的oss.mak;oss.mak包含進(jìn)OSS系統(tǒng)各子模塊的makefile,其中包括COMMON子模塊的common.mak;common.mak生成本模塊的目標(biāo)文件;oss.mak把各模塊的目標(biāo)文件連接成子系統(tǒng)的目標(biāo)文件,完成編譯;上面的過程中,只列出了關(guān)鍵步驟的主線makefile,并沒有寫出只作了變量設(shè)置的makefile,是為了便于描述,不致顯得零亂。平臺makefile同PC-lint的集成通過上節(jié)的執(zhí)行過程可以看出,從第9步開始makefile由平臺級轉(zhuǎn)到了子系統(tǒng)級,真正的編譯工作也是從第9步開始的,Pub.mak根據(jù)傳入的參數(shù)Oss去執(zhí)行相應(yīng)部分,完成具體的功能。那么,首先我們來看一下Pub.mak具體結(jié)構(gòu):Default:BaseFunc…BaseFunc:MakeForce …CleanLinkFile:MakeForce …MakeForce:##BSP子系統(tǒng)Bsp:BaseFuncBspTargetBspTarget: …BspClean: …BspCleanAll: …##OSS子系統(tǒng)Oss:BaseFunc@echo開始支撐子系統(tǒng)的編譯 $(_MAK_CONTINUE_WHEN_ERROR)@$(MAKE)-C$(_SOURCE_PATH)/oss-foss.makOssOnlyOssTarget: …OssClean: …OssCleanAll: …##SCS子系統(tǒng)…##DBS子系統(tǒng)…##SIG子系統(tǒng)…##BRS子系統(tǒng)…##MCS子系統(tǒng)…##OAM子系統(tǒng)…##PP子系統(tǒng)…##TEST子系統(tǒng)…##DivisionAppTarget…實際上,在我們上面的例子中,當(dāng)執(zhí)行makeOss之后,在Pub.mak里只是執(zhí)行的Oss:那一段的帶有下劃線的代碼,完成OSS子系統(tǒng)的編譯。Pub.mak為每一個子系統(tǒng)都定義了若干個目標(biāo),還是以O(shè)SS子系統(tǒng)為例,就有:Oss、OssTarget、OssClean、OssCleanAll這幾個目標(biāo),分別完成子系統(tǒng)的編譯和生成文件的清理,其他的各個子系統(tǒng)都定義了同樣類似的目標(biāo)。前面我們講了這么多,有makefile的原理,有平臺目前makefile的結(jié)構(gòu),其實最終的目的都是為了看如何把PC-lint同makefile結(jié)合起來,完成系統(tǒng)代碼批量檢查的功能。那么,Pub.mak就是關(guān)鍵所在,我們可以在Pub.mak里為每個子系統(tǒng)增加一個目標(biāo)定義來完成調(diào)用PC-lint進(jìn)行靜態(tài)代碼分析。比如:可以為OSS子系統(tǒng)增加一個目標(biāo)OssLint。下面將列出為增加OssLint對平臺的makefile所作的修改:Pub.makOssLint: @echo開始支撐子系統(tǒng)的Lint $(_MAK_CONTINUE_WHEN_ERROR)@$(MAKE)-C$(_SOURCE_PATH)/oss-foss.makOssLintoss.mak#定義PCLint所需的變量(這部分設(shè)置暫時放在這)_PCLINT_PATH=E:/PCLink/x/PC.Lint.v8.00NLINT=$(_PCLINT_PATH)/lint-ntLINTOPTION=-zero-os($(subst.lob,.txt,$@))-i$(_PCLINT_PATH)/std.lntLINTOPTIONoss=$(LINTOPTION)$(_OSS_INCLUDE_PATH)#PCLint的執(zhí)行入口 OssLint:$(_OSS_LINT_PATH)/Oss_SubSys_Obj.lob @echo只完成支撐子系統(tǒng)各模塊的Lint。$(_OSS_LINT_PATH)/Oss_SubSys_Obj.lob:$(_Oss_All_Lint_Objects) @ifnotexist$(_OSS_LINT_PATH)$(MKDIR)$(subst/,\,$(_OSS_LINT_PATH)) $(LINT)$(LINTOPTION)$(_Oss_All_Lint_Objects)-oo($@) @echo輸出內(nèi)容為$@Common.mak#PCLint_Oss_Common_Lint_Depend+=$(addprefix$(_OSS_COMMON_LINT_PATH)/,$(subst.c,.lob,$(notdir$(_Oss_Common_All_C))))_Oss_All_Lint_Objects+=$(_Oss_Common_Lint_Depend)$(_OSS_COMMON_LINT_PATH)/%.lob:$(_OSS_COMMON_SORUCE_PATH)/source/%.c @echo開始Lint$< @ifnotexist$(_OSS_COMMON_LINT_PATH)$(MKDIR)$(subst/,\,$(_OSS_COMMON_LINT_PATH)) $(ECHO)Linting$@ $(LINT)$(OSS_LINT_CFLAGS)-u+fdi$(LINTOPTIONoss)$<-oo($@) @echoDone!OssCfg.mak#用于PCLint存放lob文件(子系統(tǒng))ifeq(TRUE,$(_MAK_EXIST_MULTI_CPU))_OSS_LINT_PATH=$(_TEMP_PATH)/Oss/Lint/$(_OSS_NET_ELEMENT)/\$(subst_OSS_,,$(_OSS_VERSION_TYPE))/$(_OSS_PHYSICAL_BOARD_NAME)/\$(_OSS_LOGIC_BOARD_NAME)/CPU$(_CURRENT_CPU_INDEX)/\$(_OSS_CPU_NAME)else_OSS_LINT_PATH=$(_TEMP_PATH)/Oss/Lint/$(_OSS_NET_ELEMENT)/\$(subst_OSS_,,$(_OSS_VERSION_TYPE))/$(_OSS_PHYSICAL_BOARD_NAME)/\$(_OSS_LOGIC_BOARD_NAME)/$(_OSS_CPU_NAME)endif#用于PCLint存放lob文件(子模塊)_OSS_PUB_LINT_PATH =$(_OSS_LINT_PATH)/Pub/OssPub_OSS_COMMON_LINT_PATH=$(_OSS_LINT_PATH)/Common_OSS_SCHE_LINT_PATH =$(_OSS_LINT_PATH)/Sche_OSS_COMM_LINT_PATH =$(_OSS_LINT_PATH)/Comm_OSS_TIMER_LINT_PATH =$(_OSS_LINT_PATH)/Timer_OSS_MEM_LINT_PATH =$(_OSS_LINT_PATH)/Mem_OSS_DEV_LINT_PATH=$(_OSS_LINT_PATH)/Device_OSS_FILE_LINT_PATH =$(_OSS_LINT_PATH)/File_OSS_EXCEP_LINT_PATH =$(_OSS_LINT_PATH)/Excep_OSS_VOS_LINT_PATH =$(_OSS_LINT_PATH)/Vos_OSS_SDL_LINT_PATH =$(_OSS_LINT_PATH)/Sdl#配置DEBUG或者是RELEASE版本的編譯標(biāo)志ifeq(_OSS_DEBUG,$(_OSS_VERSION_TYPE))_OSS_VERSION_LINT_FLAG=-D_OSS_DEBUGelse_OSS_VERSION_LINT_FLAG=-D_OSS_RELEASEendif#定義Lint的參數(shù)OSS_LINT_CFLAGS=$(LINT_CFLAGS)$(_OSS_VERSION_LINT_FLAG)#定義最上層的PCLint參數(shù)TOPLINT_COMMON_CFLAGS=$(COMMON_DEVICE_DEFINE)\-D_REENTRANT-DRW_MULTI_THREAD\$(_MAK_TORNADO_INCLUDE_PATH)#為ARM配置編譯、鏈接選項ifeq($(_CPU_TYPE),_CPU_ARM)LINT_CFLAGS=$(TOPLINT_COMMON_CFLAGS)\-DCPU=ARMSA110endif#為每種類型的CPU都要設(shè)置,這里略過…經(jīng)過上面的修改就可以通過makefile調(diào)用PC-lint進(jìn)行代碼的檢查了(這里只是針對OSS子系統(tǒng)COMMON模塊,其他部分類似)。它將對每一個.C文件做單元檢查并生成一個目標(biāo)模塊.lob,這個過程中產(chǎn)生的所有錯誤、警告信息都將存入一個同名的.txt文件,并最后把相應(yīng)的目標(biāo)模塊連接成子系統(tǒng)的目標(biāo)模塊Oss_SubSys_Obj.lob,這個過程將檢查多個模塊連接在一起后是否會存在問題,些處也會把產(chǎn)生的告警存入名為Oss_SubSys_Obj.txt的文件。需要注意的是PC-lint的所有輸出文件(*.lob、*.txt)的名字都是makefile中定義的。注:lob文件(LintObjectModule)是一個C或C++模塊內(nèi)的外部信息的總結(jié)(二進(jìn)制形式)。PC-lint能使用這些信息來和其它模塊比較一致性。保存檢查結(jié)果的目錄如下所示:tar├─temp├─Oss├─Lint├─PCF├─DEBUG├─MNIC├─UPCF├─ARM├─Oss_SubSys_Obj.txtOss_SubSys_Obj.lobCommon├─OSS_Config.txtOSS_Config.lobOSS_Device_Cfg.txtOSS_Device_Cfg.lobOss_LogicBoardCfg.txtOss_LogicBoardCfg.lobOss_ProcessType.txtOss_ProcessType.lobOss_SubsysEx.txtOss_SubsysEx.lob平臺推廣方案(建議)推廣使用的前提1、通過對PC-lint在一定范圍的試用,形成一個全平臺統(tǒng)一的PC-lint檢查選項模板,此模板應(yīng)按照PC-lint不同的告警級別進(jìn)行分類,按照從低到高逐漸提高告警級別的方式,一步一步改善程序質(zhì)量。2、根據(jù)不同的模板和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育賽事用帳篷購銷合同
- 雙方夫妻離婚協(xié)議書
- 柚子水果購銷合同
- 軟件和信息技術(shù)服務(wù)外包合作協(xié)議
- 離婚協(xié)議書去哪弄
- 環(huán)境監(jiān)測技術(shù)設(shè)備供應(yīng)協(xié)議
- 綠色出行服務(wù)平臺合作協(xié)議
- 砂石場勞動合同
- 農(nóng)產(chǎn)品電商運營推廣合同
- 房產(chǎn)中介公司勞動合同
- 定量包裝商品培訓(xùn)
- 前言 馬克思主義中國化時代化的歷史進(jìn)程與理論成果
- 無線電技術(shù)的起源與發(fā)展
- 數(shù)控銑床(加工中心)編程與操作完整版課件
- 感動中國人物-于敏
- 《中國特色社會主義法治理論》復(fù)習(xí)題集及解析共20篇
- 融資租賃租金計算表
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:Chapter 5 Recursion
- 《中國—東盟自由貿(mào)易區(qū)概論》新版
- 降低鉆孔灌注樁混凝土充盈系數(shù)QC
- 趣味歷史(課堂PPT)
評論
0/150
提交評論