结合使用Parasoft C/C++test和CMake进行静态分析
CMake是用于构建,测试和打包软件的最受欢迎的工具之一。它大大简化了大型项目的构建过程的管理。Parasoft C/C++test 2020.1版本引入了一系列增强功能,可以简化与基于CMake的项目的集成。
在针对最大和知名汽车制造商之一的测试解决方案推出期间,我们开发了这些增强功能。
我们的挑战是将静态分析和单元测试功能引入基于自适应AUTOSAR平台的大型复杂项目中。这些项目由多个静态和动态库以及许多可执行文件组成。
在此博客文章中,我将说明如何将Parasoft C/C++test静态分析功能集成到基于CMake的项目中。请继续关注我的下一篇文章,其中我将解释如何对单元测试执行相同的操作。
将静态分析集成到基于Cmake的项目中
要执行静态代码分析,诸如Parasoft C/C++test之类的工具需要有关项目构建的信息。通常,只需要编译命令行来调用用于分析的文件。
使用Parasoft C/C++test,有多种方法可以集成到内部版本中。不同的构建系统可能需要不同的方法。对于基于CMake的项目,有很多可用的选项可以使静态分析变得毫不费力,并且对过程的更改最少。它使与C/C++test的平滑集成成为可能。
CMake脚本可以轻松配置为生成编译时信息作为JSON文件。通常,每个版本会获得一个JSON文件。此JSON文件包含静态分析器执行代码扫描所需的全部内容。然后在生成生成脚本时创建带有编译命令行的JSON文件。C/C++test 2020.1版本了解此格式,可以将其直接用作执行静态分析的输入。
如何在基于CMake的项目上运行静态分析
在基于CMake的项目上运行静态分析的过程涉及以下步骤:
- 使用编译命令启用JSON文件的生成。这是一次性活动。
- 生成您的构建脚本。这将包括compile-info JSON文件生成。
- 通过将JSON文件中的compile-info作为静态分析器的输入来运行静态分析。
就是这样!
基于CMake的项目的静态分析示例
让我们来看一个在基于CMake的项目上运行静态分析的示例。 如果尚未安装,请:
按着这些次序
安装后,转到安装目录并进入示例子文件夹。复制Timer示例,然后进入Timer目录。(这些步骤使用Linux作为开发平台。)
您应该看到以下内容:
本示例准备使用位于主目录中的“静态”makefile或使用CMake生成的构建脚本进行构建。
通过使用cd在Timer目录内创建一个构建文件夹。使用CMake调用生成脚本。
如果在生成后列出构建目录的内容,我们将看到已生成compile_commands.json文件。
对于下一个示例项目,已经启用了compile-info JSON文件的生成。
现在,我们准备使用生成的compile_commands.json文件运行静态分析。一个很大的优点是我们可以将.json文件直接附加到Parasoft C/C++test标准产品的命令行界面中:
接下来,执行静态分析并返回结果。
此集成方法可用于CI或在开发人员桌面本地使用。可能需要的唯一修改是启用compile_command.json文件的生成。
如何在项目中启用生成文件
如果您没有在项目中启用compile_command.json文件的生成,则可以通过以下两种方法之一进行。
选项1
在CMakeLists.txt文件中将CMAKE_EXPORT_COMPILE_COMMANDS选项设置为ON。
例如
设置(CMAKE_EXPORT_COMPILE_COMMANDS ON)
选项2
生成构建脚本时,将其添加到cmake的命令行调用中。
例如
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
这就是将静态分析集成到基于CMake的项目中的全部。 接下来,我将介绍CMake的单元测试:结合使用Parasoft C/C++test和CMake进行单元测试。