結(jié)合使用Parasoft C/C++test和CMake進(jìn)行靜態(tài)分析
CMake是用于構(gòu)建,測(cè)試和打包軟件的最受歡迎的工具之一。它大大簡(jiǎn)化了大型項(xiàng)目的構(gòu)建過(guò)程的管理。Parasoft C/C++test 2020.1版本引入了一系列增強(qiáng)功能,可以簡(jiǎn)化與基于CMake的項(xiàng)目的集成。
在針對(duì)最大和知名汽車(chē)制造商之一的測(cè)試解決方案推出期間,我們開(kāi)發(fā)了這些增強(qiáng)功能。
我們的挑戰(zhàn)是將靜態(tài)分析和單元測(cè)試功能引入基于自適應(yīng)AUTOSAR平臺(tái)的大型復(fù)雜項(xiàng)目中。這些項(xiàng)目由多個(gè)靜態(tài)和動(dòng)態(tài)庫(kù)以及許多可執(zhí)行文件組成。
在此博客文章中,我將說(shuō)明如何將Parasoft C/C++test靜態(tài)分析功能集成到基于CMake的項(xiàng)目中。請(qǐng)繼續(xù)關(guān)注我的下一篇文章,其中我將解釋如何對(duì)單元測(cè)試執(zhí)行相同的操作。
將靜態(tài)分析集成到基于Cmake的項(xiàng)目中
要執(zhí)行靜態(tài)代碼分析,諸如Parasoft C/C++test之類的工具需要有關(guān)項(xiàng)目構(gòu)建的信息。通常,只需要編譯命令行來(lái)調(diào)用用于分析的文件。
使用Parasoft C/C++test,有多種方法可以集成到內(nèi)部版本中。不同的構(gòu)建系統(tǒng)可能需要不同的方法。對(duì)于基于CMake的項(xiàng)目,有很多可用的選項(xiàng)可以使靜態(tài)分析變得毫不費(fèi)力,并且對(duì)過(guò)程的更改最少。它使與C/C++test的平滑集成成為可能。
CMake腳本可以輕松配置為生成編譯時(shí)信息作為JSON文件。通常,每個(gè)版本會(huì)獲得一個(gè)JSON文件。此JSON文件包含靜態(tài)分析器執(zhí)行代碼掃描所需的全部?jī)?nèi)容。然后在生成生成腳本時(shí)創(chuàng)建帶有編譯命令行的JSON文件。C/C++test 2020.1版本了解此格式,可以將其直接用作執(zhí)行靜態(tài)分析的輸入。
如何在基于CMake的項(xiàng)目上運(yùn)行靜態(tài)分析
在基于CMake的項(xiàng)目上運(yùn)行靜態(tài)分析的過(guò)程涉及以下步驟:
- 使用編譯命令啟用JSON文件的生成。這是一次性活動(dòng)。
- 生成您的構(gòu)建腳本。這將包括compile-info JSON文件生成。
- 通過(guò)將JSON文件中的compile-info作為靜態(tài)分析器的輸入來(lái)運(yùn)行靜態(tài)分析。
就是這樣!
基于CMake的項(xiàng)目的靜態(tài)分析示例
讓我們來(lái)看一個(gè)在基于CMake的項(xiàng)目上運(yùn)行靜態(tài)分析的示例。 如果尚未安裝,請(qǐng)安裝標(biāo)準(zhǔn)版本的C++test 2020.1:
按著這些次序
安裝后,轉(zhuǎn)到安裝目錄并進(jìn)入示例子文件夾。復(fù)制Timer示例,然后進(jìn)入Timer目錄。(這些步驟使用Linux作為開(kāi)發(fā)平臺(tái)。)
您應(yīng)該看到以下內(nèi)容:
本示例準(zhǔn)備使用位于主目錄中的“靜態(tài)”makefile或使用CMake生成的構(gòu)建腳本進(jìn)行構(gòu)建。
通過(guò)使用cd在Timer目錄內(nèi)創(chuàng)建一個(gè)構(gòu)建文件夾。使用CMake調(diào)用生成腳本。
如果在生成后列出構(gòu)建目錄的內(nèi)容,我們將看到已生成compile_commands.json文件。
對(duì)于下一個(gè)示例項(xiàng)目,已經(jīng)啟用了compile-info JSON文件的生成。
現(xiàn)在,我們準(zhǔn)備使用生成的compile_commands.json文件運(yùn)行靜態(tài)分析。一個(gè)很大的優(yōu)點(diǎn)是我們可以將.json文件直接附加到Parasoft C/C++test標(biāo)準(zhǔn)產(chǎn)品的命令行界面中:
接下來(lái),執(zhí)行靜態(tài)分析并返回結(jié)果。
此集成方法可用于CI或在開(kāi)發(fā)人員桌面本地使用??赡苄枰奈ㄒ恍薷氖菃⒂胏ompile_command.json文件的生成。
如何在項(xiàng)目中啟用生成文件
如果您沒(méi)有在項(xiàng)目中啟用compile_command.json文件的生成,則可以通過(guò)以下兩種方法之一進(jìn)行。
選項(xiàng)1
在CMakeLists.txt文件中將CMAKE_EXPORT_COMPILE_COMMANDS選項(xiàng)設(shè)置為ON。
例如
設(shè)置(CMAKE_EXPORT_COMPILE_COMMANDS ON)
選項(xiàng)2
生成構(gòu)建腳本時(shí),將其添加到cmake的命令行調(diào)用中。
例如
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
這就是將靜態(tài)分析集成到基于CMake的項(xiàng)目中的全部。 接下來(lái),我將介紹CMake的單元測(cè)試:結(jié)合使用Parasoft C/C++test和CMake進(jìn)行單元測(cè)試。