此章节:
要使用现有构建系统自动创建项目,C/C++test 需要有关代码库生成过程的信息。为了向 C/C++test 提供必要的信息,您可以运行 C/C++test 附带的 cpptestscan
或 cpptesttrace
实用程序来创建一个 C/C++test 项目,通常使用诸如 GNU make、CMake 或 QMake 之类的构建工具来构建该项目。该实用程序输出一个包含 C/C++test 所需的构建信息的构建数据文件(有关详细信息,请参见关于构建数据文件(.bdf))。或者,您可以先构建一个项目,然后使用实用程序收集的信息进行手动配置。
如果使用 Cmake,还可以直接在 Cmake 构建文件中定义 C/C++test 项目。这使您可以在使用 Cmake 进行构建时自动生成 C/C++test 项目,而无需运行cpptestscan
或cpptesttrace
。有关详细信息,请参见 将 C/C++test 集成到 CMake Build 中。
您还可以使用 C/C++test 项目创建向导导入 CMake JSON 构建定义文件。有关此项目创建方法的更多信息,请参见Importing Project Using Build Data File with the GUI Wizard。
构建信息(例如工作目录,编译的命令行选项以及原始构建的链接过程)存储在调用构建数据文件的文件中。以下示例是来自构建数据文件的片段:
------- 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 |
构建数据文件可用作有关项目源文件、编译器可执行文件、编译器选项、链接器可执行文件以及用于构建项目的选项的信息源。使用构建数据文件创建项目的三种方法:
使用命令行自动导入项目。请参见 从命令行导入一个项目。
如果满足以下条件,还可以将必需的环境变量存储在构建数据文件中:
请参见下面的 |
cpptestscan
或cpptesttrace
创建构建数据文件cpptestscan
和 cpptesttrace
可执行文件由 C/C++test 附带位于 <INSTALL_DIR>/bin
目录。他们从现有代码库的构建过程中收集信息,使用该信息生成构建数据文件,并将有关每次执行的信息附加到文件中。
cpptestscan
实用程序在正常构建期间用作编译器和/或链接器的包装。要在现有的构建中使用 cpptestscan
,需要使用 cpptestscan
作为现有构建的编译器/链接器可执行文件的前缀来构建代码库。这可以通过两种方式完成:
cpptestscan
用作编译器/链接器可执行文件的包装器cpptestscan
嵌入实际的 make 文件或构建脚本中。要将cpptesttrace
与现有构建一起使用,请使用cpptesttrace
作为整个构建命令的前缀构建代码库。 cpptesttrace
将跟踪在构建期间执行的编译器和链接器进程,并将它们存储在构建数据文件中。
在这两种情况下,您都需要将 C++test 安装目录添加到 PATH
环境变量中,或者指定任一实用程序的完整路径。
下表总结了cpptestscan
和cpptesttrace
的其他选项。可以直接为cpptestscan
命令设置选项,也可以通过环境变量设置选项。通过在命令行中更改前缀,可以将大多数选项应用于 cpptestscan
或 cpptesttrace
。
基本cpptestscan
用法:
cpptestscan.exe [options] [compile/link command]
cpptestscan [options] [compile/link command]
基本cpptesttrace
用法:
cpptesttrace.exe [options] [build command]
cpptesttrace [options] [build command]
选项 | 环境变量 | 说明 | 默认 |
---|---|---|---|
-- cpptestscanOutputFile= <OUTPUT_FILE> -- cpptesttraceOutputFile= <OUTPUT_FILE> | CPPTEST_SCAN_OUTPUT_FILE) | 定义要将构建信息附加到的文件。 | cpptestscan.bdf |
| CPPTEST_SCAN_PROJECT_NAME | 定义 C++test 项目的建议名称。 | 当前工作目录的名称 |
| CPPTEST_SCAN_RUN_ORIG_CMD | 如果设置为“是”,将执行原始命令行。 | 是 |
| CPPTEST_SCAN_QUOTE_CMD_LINE_MODE | 确定在准备运行 cmd 行时 C++test 引用参数的方式。
Linux 不支持 cpptestscanQuoteCm dLineMode | 全部 |
| CPPTEST_SCAN_CMD_LINE_PREFIX | 如果打开了非空且正在运行的原始可执行文件,则指定的命令将以原始命令行为前缀。 | [空] |
| CPPTEST_SCAN_ENV_IN_OUTPUT | 启用转储选定的环境变量和输出文件的命令行参数。对于高级设置,请使用–cpptestscanEnvFile 和– cpptestscanEnvars 选项 | 否 |
| CPPTEST_SCAN_ENV_FILE | 如果启用,指定文件将保留所有构建命令的常见环境变量:主输出文件只会保持差异。使用此选项来缩小主输出文件的大小。在启用 – cpptestscanEnvInOut 的情况下使用此选项 | [空] |
| CPPTEST_SCAN_ENVARS | 选择要转储的环境变量的名称,或选择 '*' 将其全部选中。在启用 – cpptestscanEnvInOut 的情况下使用此选项 | * |
| CPPTEST_SCAN_USE_VARIABLE | 将扫描的构建信息中每次出现的 "VALUE" 字符串替换为 "${VAR_NAME}" 变量用法。 | [空] |
-- cpptesttraceTraceComm 和 | CPPTEST_SCAN_TRACE_COMMAND | 定义在收集构建过程信息时将被跟踪的命令名称。这些名称指定为正则表达式,应与构建过程中使用的原始编译器/链接器命令匹配。 |
假设编译器变量为 CXX 而原始编译器为 g++ 的基于 make 的构建:
make -f </path/to/makefile> <make target> [user-specific options] CXX="cpptestscan --cpptestscanOutputFile=/path/to/name.bdf --cpptestscanProjectName=<projectname> g++"
这将照常构建代码,并在指定目录中生成构建数据文件(name.bdf)。
当构建在多个目录中运行时:
|
假定使用以下命令执行基于 make 的常规构建:
make clean all
您可以使用以下命令行:
cpptesttrace --cpptesttraceOutputFile=/path/to/name.bdf --cpptesttraceProjectName=<projectname> make clean all
这将按常规构建代码,并在指定目录中生成一个构建数据文件(name.bdf)。
如果编译器和/或链接器可执行文件的名称不匹配默认的 |
如果您的 Makefile 使用 CXX 作为编译器可执行文件的变量,并且通常定义为 CXX=g++,则可以重新定义该变量:
ifeq ($(BUILD_MODE), PARASOFT_CPPTEST)
CXX="/usr/local/parasoft/cpptestscan --cpptestscanOutputFile=<selected_location>/MyProject.bdf --cpptestscanProjectName=MyProject g++"
或者
CXX=g++
endif
接下来,像往常一样运行构建,并为 make 指定一个附加的 BUILD_MODE 变量:
make BUILD_MODE=PARASOFT_CPPTEST
将构建代码并创建一个构建数据文件(MyProject.bdf)。然后,可以使用生成的构建数据文件从图形用户界面或从命令行创建项目。
|
以下示例演示了如何使用 |
假设您具有基于 CMake 的构建,则可以使用 cpptesttrace 生成构建数据文件:
运行原始的 Cmake 命令以使用 Cmake 生成 make 文件。示例:
cmake -G "Unix Makefiles" ../project_root |
为cpptestscan
设置环境变量,确保为输出文件使用绝对路径:
export CPPTEST_SCAN_PROJECT_NAME=my_project export CPPTEST_SCAN_OUTPUT_FILE=$PROJ_ROOT/cpptestscan.bdf |
cpptesttrace
可执行文件在 PATH 上可用。cpptesttrace
作为 wrapper。例如,如果正常的构建命令是 'cpptesttrace’的 make clean all,那么命令将是 cpptesttrace make clean all
将在 CPPTEST_SCAN_OUTPUT_FILE 变量定义的位置生成一个构建数据文件。如果未设置该变量,则将在 Makefiles 的位置生成构建数据文件。
所有脚本和命令都是基于 bash 的-根据需要对它们进行调整以适应不同的 shell。
假定基于 Cmake 的构建,请执行以下操作以使用 cpptestscan 生成构建数据文件:
如果原始 CMake 命令是cmake -G “Unix Makefiles” ../project_root
,则您需要摆脱现有的 Cmake 缓存并运行 cmake 覆盖编译器变量。以下示例假定将 'gcc’用作 C 编译器,并将 'g++’用作 C++ 编译器可执行文件:
rm CMakeCache.txt CC="cpptestscan gcc" CXX="cpptestscan g++" cmake -G "Unix Makefiles" ../project_root |
cmake
在启动阶段由于未识别编译器而失败,请继续。通过创建以下 BASH 脚本,准备性能类似于 Cmake 编译器的cpptestscan
包装器脚本。在此示例中,我们假设将 'gcc' 用作 C 编译器,并将 'g++’用作 C++ 编译器可执行文件:
>cat cpptest_gcc.sh #!/bin/bash cpptestscan gcc --cpptestscanRunOrigCmd=no $* > /dev/null 2>&1 gcc $* exit $? >cat cpptest_g++.sh #!/bin/bash cpptestscan g++ --cpptestscanRunOrigCmd=no $* > /dev/null 2>&1 g++ $* exit $? |
cpptestscan
来提取选项,而无需运行编译器。第二个脚本运行实际的编译器,以便整个脚本的外观和行为类似于编译器,以便被 CMake“接受”。cpptestscan
和脚本在 PATH 上可用。原始的 Cmake 命令是 cmake -G “Unix Makefiles” ../project_root
那么您需要摆脱现有的 CMake 缓存并运行 cmake 覆盖编译器变量。在下面的示例中,我们假设将 'gcc’用作 C 编译器,并将 'g++’用作 C++ 编译器可执行文件:
rm CMakeCache.txt cmake -G "Unix Makefiles" -D CMAKE_C_COMPILER=cpptest_gcc.sh -D CMAKE_CXX_COMPILER=cpptest_g++.sh ../project_root |
为cpptestscan
设置环境变量;确保为输出 BDF 文件使用绝对路径:
export CPPTEST_SCAN_PROJECT_NAME=my_project export CPPTEST_SCAN_OUTPUT_FILE=$PROJ_ROOT/cpptestscan.bdf |
默认情况下,CMake 生成的 make 文件仅打印有关已执行操作的信息,而没有实际的编译器/链接器命令行。在 make 命令行中添加“ VERBOSE = 1”,以查看已执行的编译器/链接器命令行。 |
对于非基于 make 的构建系统,cpptestscan 和 cpptesttrace 的用法与上面显示的示例非常相似。通常,编译器在构建脚本中的某处定义为变量。要使用 cpptestscan 从该构建系统创建构建数据文件,请在原始编译器可执行文件前加上 cpptestscan 前缀。要使用 cpptesttrace 从该构建系统创建构建数据文件,请在整个构建命令行前添加 cpptesttrace 前缀。
什么时候应该使用 cpptestscan?强烈建议将构建数据文件的过程与构建系统集成在一起。这样,可以在执行常规构建而无需其他操作的情况下完成生成构建数据文件的操作。 为此,请在 Makefiles/build 脚本中使用 cpptestscan 实用程序作为编译器和链接器可执行文件的前缀。 什么时候应该使用 cpptesttrace?当无法修改生成文件/构建脚本,或者在构建命令行中给编译器/链接器可执行文件加前缀太复杂时,请使用 cpptesttrace 作为整个构建命令的前缀。 |
您可以使用【项目创建】向导来导入 BDF 或 Cmake 构建定义文件,这将创建 C++test 项目。
如果您正在使用自定义编译器,请在使用交叉编译器配置测试 启动向导之前按照说明添加它。 |
要从构建数据/定义文件创建项目:
-list-compilers
切换到运行cpptestcli
来查看受支持的编译器列表 。您也可以通过使用 -bdf <cpptestscan.bdf>
切换到cpptestcli
在命令行模式下创建基于 BDF 的项目。
如果要在创建项目后立即执行分析(例如,静态分析和/或测试生成),请确保 cpptestcli 命令使用 -config 调用首选的测试配置。示例:
cpptestcli -data "</path/to/workspace>" -resource "<projectname>" -config "team://Team Configuration" -localsettings "</path/to/name.properties>" -bdf "</path/to/name.bdf>"
如果您只是想创建项目(不执行任何分析),请省略 -config。示例:
cpptestcli -data "</path/to/workspace>" -resource "<projectname>" -localsettings "</path/to/name.properties>" -bdf "</path/to/name.bdf>"
请注意,以前用于创建未经测试的项目的 -config "util/CreateProjectOnly” 在当前版本的 C/C++test 中不再使用。不再支持伪造的测试配置“util/CreateProjectOnly”。
您可以在纯文本选项文件中定义自定义项目设置,该文件使用 -localsettings
转换传递到cpptestcli
。可以在选项文件中指定设置,如本地设置(选项)文件中所述。
以下示例演示了如何使用 cpptestscan
从命令行创建 C/C++test 项目。他们使用<INSTALL_DIR>/examples
中的 C/C++test 附带的 ATM 示例项目。
这些示例使用基于 make 的构建;但是可以从任何构建系统生成 .bdf 文件。
必须将 cpptestscan
可执行文件添加到 PATH
环境变量中:
<INSTALL_DIR>/bin/cpptestscan
必须将 cpptestcli
可执行文件添加到 PATH
环境变量中:<INSTALL_DIR>/cpptestcli
g++
是原始编译器可执行文件。/home/MyWorkspace on UNIX/Cygwin
c:\home\MyWorkspace on Windows
c:/home/MyWorkspace on Cygwin
-config
-config Must-HaveRules
).<INSTALL_DIR>/examples/ATM
目录。cpptestscan
可执行文件为原始编译器可执行文件添加前缀的同时,构建 ATM 项目:> make CC="cpptestscan g++" clean all
<INSTALL_DIR>/examples/ATM
目录中创建了一个新的数据文件(cpptestscan.bdf)
。/home/MyWorkspace
工作空间:> cpptestcli -data /home/MyWorkspace -bdf cpptestscan.bdf
中创建一个新项目<INSTALL_DIR>/examples/ATM
项目的所有源文件和构建选项。<INSTALL_DIR>/examples/ATM
目录。cpptestscan
可执行文件为原始编译器可执行文件加上前缀的情况下构建 ATM 项目:> make CC="cpptestscan --cpptestscanProjectName=myProject g++" clean all
<INSTALL_DIR>/examples/ATM
目录中创建了一个新的数据文件(cpptestscan.bdf)
。请注意myProject
被设置为项目名称。<INSTALL_DIR>/examples/ATM
中创建一个名为opts.properties
的纯文本选项文件。bdf.import.compiler.family=vc_7_1
输入到opts.properties
文件中,将编译器系列设置为 Visual C++ 7.1。cpptestscan.bdf
文件(位于原始项目的目录中)的位置,输入:bdf.import.location=BDF_LOC into opts.properties file
/home/MyWorkspace
工作空间:cpptestcli -data /home/MyWorkspace -bdf cpptestscan.bdf -localsettings opts.properties
中创建一个新项目注释:
BDF_LOC
变量用作项目位置;这是指cpptestscan.bdf
文件的位置然后,可以使用生成的构建数据文件从 GUI 或从命令行创建项目。
C/C++test 附带了 Cmake 扩展,允许您使用 Cmake 语法直接在CMakeLists.txt
构建文件中定义 C/C++test 项目。该扩展包括 cpptest_add_executable()
函数,用于定义 C/C++test 项目,包括项目位置,结构和内容。结果,在 Cmake 构建期间会自动生成 C/C++test 项目定义文件(.project 和 .parasoft)和构建数据文件(.bdf)。构建完成后,您可以将 C/C++test 项目文件和 BDF 导入工作空间中以执行分析和测试。
对 CMake 集成的支持包括以下组件:
<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-project.cmake
–您需要将 CMake 的 C/C++test 扩展添加到 CMakeFiles.txt
构建文件以提供 C/C++test 项目定义。<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest.templates/*.in
– 一组用于自动生成的项目定义文件的 C/C++test 模板,允许您高度自定义 CMake 的扩展。此外,<CPPTEST_INSTALL_DIR>/examples/CMakeProject
目录包含一个示例项目,用于演示使用 C/C++test 扩展与 CMake 的集成。
<INSTALL_DIR>/integration/cmake/cpptest-project.cmake
包含到 CMakeLists.txt
构建文件中。cpptest_add_executable()
函数定义一个代表您的 C/C++test 项目的目标 (有关详细信息,请参见定义 C/C++test 项目 )。CPPTEST_PROJECT=ON
变量激活 C/C++test 扩展并使用 配置
和 构建
命令运行 CMake 以生成 C/C++test 项目配置文件。(-import <ROOT_FOLDER_OR_PROJECT_FILE>
)将自动生成的 C/C++test 项目导入到 Eclipse 工作空间。如果将测试工件(例如测试用例或桩函数)存储在源代码控制系统中,请不要检入自动生成的项目定义文件或构建数据文件(.bdf)。每次构建 Cmake 项目时都应生成这些文件。
为了使 Cmake 自动生成 C/C++test 项目文件,您必须使用cpptest_add_executable()
函数定义一个代表您的 C/C++test 项目的目标。至少必须配置:
target_include_directories()
或target_link_libraries()
)构建选项和依赖项(外部库)。提供以下选项:
选项名称 | 说明 | 默认 |
---|---|---|
<target_name> | 目标的名称。 | 没有默认。您必须始终配置此选项。 |
CPPTEST_COMPILER_ID | 目标特定的 C/C++test 编译器标识符。要为所有目标配置相同的编译器,请在 | gcc_9-64 |
CPPTEST_PROJECT_NAME | C/C++test 项目的名称。 | 与目标名称相同。 |
CPPTEST_PROJECT_LOC | C/C++test 项目的位置。 | 当前文件夹。 |
CPPTEST_PROJECT_FOLDERS | 您想要包含在 C/C++test 项目中的其他源文件夹。您必须指定每个其他文件夹的名称和位置。 | 默认情况下,C/C++test 项目仅包含根目录。 |
EXCLUDE_FROM_ALL | 如果指定,则当前目标将从默认的 | 禁用: |
SOURCES | 您想要添加到 C/C++test 项目的源列表。 | 没有默认。您必须始终配置此选项。 |
TARGETS | 现有 CMake 目标的列表。如果已配置,则来自指定目标的源文件列表将添加到 C/C++test 项目。 | 没有默认。您必须始终配置此选项。 |
cpptest_add_executable( <target_name> [CPPTEST_COMPILER_ID <compiler_id>] [CPPTEST_PROJECT_NAME <test_project_name>] [CPPTEST_PROJECT_LOC <test_project_location>] [CPPTEST_PROJECT_FOLDERS <name1=location1> <name2=location2> ...] [EXCLUDE_FROM_ALL] SOURCES <src1.cpp> <src2.cpp> ... | TARGETS <target1> <target2> ... ) |
本节演示使用位于<CPPTEST_INSTALL_DIR>/examples/CMakeProject
目录中的示例项目与 CMake 的集成。
<CPPTEST_INSTALL_DIR>/examples/CMakeProject
。gcc_9-64
替换为 modules/mod1/CMakeLists.txt
和 <CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-project.cmake
中的编译器标识符。使用以下命令构建示例项目:
> cd <CPPTEST_INSTALL_DIR>/examples/CMakeProject > mkdir build > cd build > cmake -DCPPTEST_PROJECT=ON .. > make |
CMake 将构建项目并生成 C/C++test 项目。以下 CMakeLists.txt 文件定义了 C/C++test 项目(具有不同的项目布局和配置选项):
-app/CMakeLists.txt
modules/mod1/CMakeLists.txt
tests/cpptest_modules/CMakeLists.txt
<CPPTEST_INSTALL_DIR>/examples/CMakeProject
目录以将三个自动生成的项目导入您的 IDE。builtin://Generate Unit Tests
测试配置生成测试用例。builtin://Run Unit Test
测试配置来执行测试用例。