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