章节目录:

前言

如果您有一个自定义构建系统(例如,基于 Makefile 的构建系统),可以使用 C/C++test 的 cpptestscan 工具收集构建过程相关的信息,从而简化构建设置的配置流程。之后,您就可以按照使用构建数据文件中的选项中的说明将 C/C++test 指向生成的“构建数据文件”来配置构建设置。

正确的编译器配置至关重要

在大多数情况下,C/C++test 需要调用编译器和链接器来执行静态分析和运行时测试任务,这通常会涉及预处理、编译和链接程序。
要想使用 C/C++test 的全部功能,需确保运行 C++test 的机器拥有完整的开发环境和编译器工具链。

关于构建数据文件(.bdf)

构建信息(如工作目录、编译的命令行选项以及原始构建的链接进程)存储在构建数据文件中。以下示例来自构建数据文件的一部分:

------- cpptestscan v. 9.4.x.x -------
working_dir=/home/place/project/hypnos/pscom
project_name=pscom
arg=g++
arg=-c
arg=src/io/Path.cc
arg=-Iinclude
arg=-I.
arg=-o
arg=/home/place/project/hypnos/product/pscom/shared/io/Path.o

使用 cpptestscancpptesttrace 创建构建数据文件

cpptestscancpptesttrace 可执行文件随 C/C++test 一起提供 <INSTALL_DIR>  目录。它们从现有代码库的构建过程中收集信息,用这些信息生成构建数据文件,并将有关每个执行的信息添加到文件中。

cpptestscan 工具在正常构建期间用作编译器和/或链接器的包装器。要对现有构建使用 cpptestscan,应将 cpptestscan 用作现有构建的编译器/链接器可执行文件的前缀来构建代码库。具体可以通过两种方式完成:

  • 修改构建命令行,将 cpptestscan 用作编译器/链接器可执行文件的包装器
  • 如果不想(或不能)在命令行重写编译器变量,可在实际的 make 文件或构建脚本中插入 cpptestscan

要对现有构建使用 cpptesttrace,应将 cpptesttrace 用作整个构建命令的前缀。cpptesttrace 将跟踪构建期间执行的编译器和链接器进程,并将它们存储在构建数据文件中。

在以上两种情况下,您都需要将 C++test 安装目录添加到 PATH 环境变量中或指定任一工具的完整路径。

有关 cpptestscancpptesttrace 的更多选项汇总在下面的表中。可以直接或通过环境变量设置 cpptestscan 命令的选项。通过更改命令行中的前缀,大多数选项都可以应用于 cpptestscancpptesttrace

cpptestscan 基本用法:

cpptestscan [options] [compile/link command]
cpptestscan --cpptestscanHelp

cpptesttrace 基本用法:

cpptesttrace [options] [build command]
cpptesttrace --cpptesttraceHelp



选项环境变量说明默认值

--cpptestscanOutputFile=<OUTPUT_FILE>

--cpptesttraceOutputFile=<OUTPUT_FILE>

CPPTEST_SCAN_OUTPUT_FILE)

定义要附加生成信息的文件。cpptestscan.bdf

--cpptestscanProjectName=<PROJECT_NAME>

--cpptesttraceProjectName=<PROJECT_NAME>

CPPTEST_SCAN_PROJECT_NAME定义 C++test 项目的建议名称。当前工作目录的名称

--cpptestscanRunOrigCmd=[yes|no]

--cpptesttraceRunOrigCmd=[yes|no]

CPPTEST_SCAN_RUN_ORIG_CMD如果设置为“yes”,将执行原始命令行。yes

--cpptestscanQuoteCmdLineMode=[all|sq|none]

--cpptesttraceQuoteCmdLineMode=[all|sq|none]

CPPTEST_SCAN_QUOTE_CMD_LINE_MODE

确定 C++test 在准备运行命令行时为参数添加引号的方式。

all:所有参数都将添加引号

none:不会为参数添加引号

sq:只会为带空格或引号字符的参数添加引号

Linux 上不支持 --cpptestscanQuoteCmdLineMode。

all

--cpptestscanCmdLinePrefix=<PREFIX>

--cpptesttraceCmdLinePrefix=<PREFIX>

CPPTEST_SCAN_CMD_LINE_PREFIX如果启用了非空且正在运行的原始可执行文件,则指定的命令将添加到原始命令行前面。[empty]

--cpptestscanEnvInOutput=[yes|no]

--cpptesttraceEnvInOutput=[yes|no]

CPPTEST_SCAN_ENV_IN_OUTPUT

启用后将转储选定的环境变量和输出文件的命令行参数。对于高级设置需使用

--cpptestscanEnvFile 和 --cpptestscanEnvars 选项。

no

--cpptestscanEnvFile=<ENV_FILE>

--cpptesttraceEnvFile=<ENV_FILE>

CPPTEST_SCAN_ENV_FILE

如果启用,指定的文件为所有构建命令保存公共环境变量;主输出文件将只保留差异。使用此选项可减小主输出文件的大小。

在启用 --cpptestscanEnvInOutput 的情况下使用此选项。

[empty]

--cpptestscanEnvars=[*|<ENVAR_NAME>,...]

--cpptesttraceEnvars=[*|<ENVAR_NAME>,...]

CPPTEST_SCAN_ENVARS选择要转储的环境变量的名称,或选择‘*’来选择所有变量。在启用 --cpptestscanEnvInOutput 的情况下使用此选项。*

--cpptestscanUseVariable=[VAR_NAME=VALUE,...]

--cpptesttraceUseVariable=[VAR_NAME=VALUE,...]

CPPTEST_SCAN_USE_VARIABLE使用“${VAR_NAME}”变量用法替换扫描构建信息中每次出现的“VALUE”字符串。[empty]

--cpptesttraceTraceCommand=[<regexp>|<regexp>|...]

CPPTEST_SCAN_TRACE_COMMAND定义收集构建过程信息时将跟踪的命令名称。这些指定为正则表达式的名称应该与构建过程中使用的原始编译器/链接器命令相匹配。

示例:将 GNU Make Build 命令修改为使用 cpptestscan

假设基于 make 的构建中编译器变量为 CXX,原始编译器为 g++:

      make -f </path/to/makefile> <make target> [user-specific options] CXX="cpptestscan --cpptestscanOutputFile=/path/to/name.bdf --cpptestscanProjectName=<projectname> g++"

这将按常规方式构建代码,并在指定的目录中生成一个构建数据文件(name.bdf)。

注意

当构建在多个目录中运行时:

  • 如果不指定输出文件,则每个源构建目录都将有自己的 .bdf 文件。这有利于为每个源目录创建一个项目。
  • 如果您希望每个源目录树都有一个项目,那么需要指定一个 .bdf 文件,如上面示例所示。

示例:将 GNU Make Build 命令修改为使用 cpptesttrace

假设使用以下方法执行常规的基于 make 的构建:

     make clean all

您可以使用以下命令行:

     cpptesttrace --cpptesttraceOutputFile=/path/to/name.bdf --cpptesttraceProjectName=<projectname> make clean all

这将按常规方式构建代码,并在指定的目录中生成一个构建数据文件(name.bdf)。

注意

如果编译器和/或链接器可执行文件名称与默认 cpptesttrace 命令模式不匹配,则需要使用下面描述的 --cpptesttraceTraceCommand 选项来自定义。通过运行 'cpptesttrace --cpptesttraceHelp' 命令,可以看到默认的 cpptestscan 命令跟踪模式。

示例:将 GNU Makefile 修改为使用 cpptestscan

如果 Makefile 使用 CXX 作为编译器可执行文件的变量,并且正常定义为 CXX=g++,则可以重新定义该变量:

     ifeq ($(BUILD_MODE), PARASOFT_CPPTEST)
     CXX="/usr/local/parasoft/cpptestscan --cpptestscanOutputFile=<selected_location>/MyProject.bdf --cpptestscanProjectName=MyProject g++"
     else
     CXX=g++
     endif

接下来,按常规方式运行构建并为 make 指定一个额外的 BUILD_MODE 变量:

     make BUILD_MODE=PARASOFT_CPPTEST

将构建代码并创建构建数据文件(MyProject.bdf)。然后,生成的构建数据文件可以用于在 GUI 或命令行创建项目。

注意

cpptestscancpptesttrace 工具可以用在并行构建系统中,在并行构建系统中可以同时执行多个编译器。例如,在多核机器上准备构建数据文件时,可以将 -j <number_of_parallel_jobs> 参数传递给 GNU make 命令来构建项目并快速准备构建数据文件。

什么时候应该使用 cpptestscan?

强烈建议将准备构建数据文件的过程与构建系统集成。这样,生成构建数据文件就可以在执行常规构建时完成,而无需额外的操作。

要实现这一目的,应在 Makefiles/构建脚本中将 cpptestscan 工具用作编译器和链接器可执行文件的前缀。

什么时候应该使用 cpptesttrace?

当无法修改 Makefiles/构建脚本或在构建命令行给编译器/链接器可执行文件添加前缀太过复杂时,应使用 cpptesttrace 作为整个构建命令的前缀。

  • No labels