您可能一直在静态分析中使用CMake。但您是否尝试过将Parasoft C/C++test与CMake一起使用吗?以下是如何使用C/C++test在基于CMake的项目中运行静态分析的详细说明。
CMake是用于构建、测试和打包软件的最流行的工具之一。Parasoft C/C++test通过简化构建管理过程,简化了与基于CMake的项目的集成。项目越大,影响就越明显。
Parasoft团队在为一家大型知名汽车制造商推出测试解决方案期间开发了这些增强功能。我们的目标是在基于自适应AUTOSAR平台的大型复杂项目中引入静态分析和单元测试功能。这些项目由多个静态和动态库以及许多可执行文件组成。
本文将解释如何将Parasoft C/C++test静态分析功能集成到基于CMake的项目中,您可以对单元测试执行同样的操作。
1. 将静态分析集成到基于CMake的项目中
要执行静态代码分析,Parasoft C/C++test等工具需要有关项目构建的信息。通常,所需要的只是编译命令行,用来调用用于分析的文件。
有不同的方法可以把C/C++test集成到构建过程中。不同的构建系统可能需要不同的方法。有了基于CMake的项目,就可以轻松地进行静态分析,并且只需对工作流进行最小的修改。这有助于与C/C++test顺利集成。
CMake脚本可以很容易地配置将编译时信息生成为JSON文件。通常每次构建都会得到一个JSON文件。这个JSON文件包含静态分析器执行代码扫描所需的所有内容。然后在生成构建脚本时创建带有编译命令行的JSON文件。C/C++test可以识别这种格式,并可以直接将其用作执行静态分析的导入文件。
2. 在基于CMake的项目上运行静态分析
在基于CMake的项目上运行静态分析的过程涉及以下步骤:
-
使用编译命令启用JSON文件的生成。这是一次性活动。
-
生成构建脚本。这将包括编译信息JSON文件生成。
-
通过将JSON文件中的编译信息作为静态分析的导入文件来运行静态分析。
2.1 基于CMake的项目静态分析实例
让我们一起看一个在基于CMake的项目上运行静态分析的示例。如果您也有相同的环境,请咨询Parasoft China获取C/C++test试用。
遵循以下步骤
安装后,转到安装目录并进入examples子文件夹。复制Timer示例并进入Timer目录。(这些步骤都是在Linux系统上操作的。)您应该看到以下内容:
准备使用位于主目录中的Makefile文件或使用CMake生成的构建脚本来构建此示例。
在Timer文件夹下面创建一个build文件夹,并且进入到build文件夹下,通过调用CMake脚本来构建Timer项目。
如果我们显示出build目录的内容,我们将看到生成了compile_commands.json文件。
对于下一个示例项目,我们已经启用了生成编译信息JSON文件的功能。
现在,我们准备使用生成的compile_commands.json文件运行静态分析。这个方法最大的一个优点就是,我们可以将.json文件直接用在Parasoft C/C++test命令行界面中:
等待命令执行结束。静态分析就完成了,并且生成了报告。
这种集成方法可以用于持续集成(CI),也可以在开发人员桌面上本地使用。唯一可能需要的修改是启用compile_command.json文件生成的功能。
如何在项目中启用json文件生成功能
如果您的项目中没有启用compile_command.json文件的生成,我们可以用两种方法之一来实现。
方法1:
在CMakeLists.txt文件中,将CMAKE_EXPORT_COMPILE_COMMANDS选项设置为ON。
示例:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
方法2
在生成构建脚本时,将其添加到cmake的命令行调用中。
示例:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 <path to src>
以上这就是将静态分析集成到基于CMake的项目中的全部内容啦。