本主题说明如何查看和自定义项目级别和文件级别的选项,包括构建设置、自定义编译器、链接器选项及其他设置。
章节目录:
查看和修改设置
必须配置相应的构建设置,以便 C++test 能正确测试您的代码。另外,需要时可以配置高级设置(插桩选项)。
查看和修改设置的步骤:
右键点击您想要查看和修改设置的项目或文件的 C/C++ 项目树 (也称为“项目树”)节点,然后选择快捷菜单中的属性。将打开属性对话框。
- 展开左侧窗格中的 Parasoft> C/C++test 分类。
- 选择想要查看和/或更改的设置分类。分类和可用的设置在下文会有说明。必须查看构建设置并在必要时修改。可以选择查看其他设置。
- 在右侧窗格中修改选项。
- 点击应用,然后点击确定。
可用设置
构建设置
选项源:定义如何设置选项。 选项可以手动设置,或者基于构建系统选项、构建数据文件选项、Green Hills 项目选项或 Eclipse Managed Make 项目设置。
如果您使用
cpptestscan
来创建构建数据文件(如使用现有的构建系统创建项目中所述)并且希望手动管理构建数据文件的重新生成和更新,则建议使用构建数据文件 (bdf) 文件中的选项。- 如果 1) 您的项目可以从命令行构建,但您没有创建构建数据文件或者 2) 您创建了构建数据文件,但希望使用 C/C++test 管理构建数据文件的重新生成/更新,则建议使用构建系统中的选项 。
对于最初在 Green Hills IDEs 中开发的项目,建议使用 GHS 项目中的选项。
对于最初在 Eclipse 中开发的 Managed Make 项目,建议使用该项目中的选项 。
否则,建议手动指定所有选项。
可用的控件取决于所选的选项源。
注释
如果您决定手动管理构建数据文件,则强烈建议将用于创建构建数据文件的机制集成到构建过程中。这样,开发团队的成员就可以访问和使用您的构建数据文件,并有助于在常规构建活动中无缝生成或更新该文件。
管理多个 C/C++test 的项目配置
多个 C/C++test 项目配置可用于管理一系列不同配置的测试。例如,您可以配置一个项目来测试主机编译器、交叉编译器、在 Debug 模式下进行测试、在 Release 模式下进行测试等。
您还可以将当前的活动属性导出到文件中,或从文件导入先前保存的属性:
- 在项目浏览器中右键点击您的项目,点击属性。
- 选择 Parasoft> C/C++test 并点击导出或导入。
- 浏览属性,然后点击保存或打开。
导出属性会创建一个文件,该文件也可用作 cpptestcli -settings
参数中的参数。在命令行进行测试时,这样可以轻松地在不同的项目配置之间切换。
使用构建数据文件中的选项
配置适当设置的步骤:
- 在构建数据文件 (bdf) 字段中,输入或浏览先前创建的构建数据文件的位置(如使用 cpptestscan 或 cpptesttrace 创建构建数据文件中所述)。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
${resource_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
会解析为C:\src\source.cpp
。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
- 如果您希望 C/C++test 在每次扫描选项时清除以前的选项信息,则清除保留以前收集的选项 (增量构建) 复选框。否则,每个构建都将被视为增量构建。
- 如果您有增量构建并希望 C/C++test 在扫描其中的选项后删除构建数据文件,则选择在处理后删除构建数据文件 (bdf) 复选框。这将确保在执行后续构建时,构建数据文件不会无限增长。
- 在编译器设置部分,指定编译器可执行文件(用于 C 和 C++ 源项目)、链接器和种类。如果未列出您的编译器,请为其添加一个自定义编译器定义(如使用交叉编译器配置测试中所述)。
- 在选项部分,指定要使用且尚未在 Makefile 中指定的任何测试特定或 C/C++test 特定的编译器选项或链接器选项。详细信息,请参阅指定自定义编译器设置和链接器选项 。
当指定构建数据文件中的选项发生变更时,C/C++test 会自动重新扫描选项并相应地修改项目。如果要让 C/C++test 立即更新选项(例如,如果外部配置文件已更改),则点击重置缓存按钮。
使用构建系统中的选项
配置适当设置的步骤:
- 在构建命令行字段中,查看 C/C++test 将用于运行构建的选项(例如,使用指定的 makefile 执行 make)并从该过程中收集项目构建选项。
- C/C++test 通过将构建命令行中指定的值重新分配给适当的变量来替换编译器。
- C/C++test 选项扫描器由
${CPPTEST_SCAN}
变量表示。
- 如果您的构建系统使用的编译器/链接器变量与 C/C++test 提供的默认变量不同,请根据需要修改构建命令行。
- C/C++test 会扫描将使用选项扫描器处理的所有文件的选项。您应该提供适当的命令行来强制对所有源文件执行编译器。否则,某些文件将不会被测试。
以下是一个 GNU 构建命令行示例:
make -i -B objects CXX=${CPPTEST_SCAN} CC=${CPPTEST_SCAN}
此命令行将使用-B
(无条件创建所有目标)和-i
(忽略错误)标志来构建objects
make 目标。CXX
和CC
make 变量将被${CPPTEST_SCAN}
替代。此命令行将允许 C/C++test 提取通常被编译以构建objects
目标的所有源文件的选项。- 如果您的命令行 shell 以特殊方式处理 $(例如,以 bash 格式),请注意使用 \(反斜杠)来转义 $ 符号;例如
CXX=\${CPPTEST_SCAN}
- 只要可以通过重新分配适当的变量来替换编译器和链接器,C/C++test 就可以支持任何构建过程(使用 nmake、ant 或任意构建脚本)。请咨询您的构建工程师了解适当的选项。
关于 -B 选项的重要说明
构建命令行已预设为包括 -B 选项(无条件地构建所有目标)。仅 GNU Make 3.80+ 支持此选项。
如果您使用的是较早版本的 make,应在创建项目之前清理构建。保留 -k 选项。
如果您使用的 make 不支持 -B,则需要进一步修改命令行。项目属性中使用的默认构建命令行没有任何目标。我们建议您使用用于构建您要分析的代码的目标来修改此命令行,例如:
make -i CXX=\${CPPTEST_SCAN} ... all
(此处 all
是一个目标)。
另外,在正常构建目标之前添加一个清理步骤。示例:
make -i CXX={CPPTEST_SCAN} ... clean all
这将首先构建 clean 目标,然后构建 all
目标。尽管从 C/C++test 运行的 make 实际上不会构建目标文件,但 clean
步骤确实会进行清理。
3. 在构建工作目录字段,指定应在其中执行构建过程的目录。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
${Project_loc}
解析为 Eclipse 项目位置(包含.project
文件的位置)的绝对路径。如果您的项目具有“链接”源文件夹,即源文件并非实际上存在于项目位置,则不能使用此变量,详细信息请参阅下面框内的内容。${Project_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
将解析为C:\src\source.cpp
。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
4. 在依赖文件字段,指定要检查更改情况的 Makefile。如果指定的文件更改,选项将自动更新。
使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
${Project_loc}
解析为 Eclipse 项目位置 (包含.project
文件的位置)的路径。如果您的项目具有“链接”源文件夹,即源文件并非实际上存在于项目位置,则不能使用此变量,详细信息请参阅下面框内的内容。${resource_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
将解析为C:\src\source.cpp
。
5. 在编译器设置部分,指定编译器可执行文件(用于 C 和 C++ 源项目)、链接器和种类。如果未列出您的编译器,请为其添加一个自定义编译器定义(如使用交叉编译器配置测试中所述)。
6. 在选项部分,指定要使用且尚未在 Makefile 中指定的任何测试特定或 C/C++test 特定的编译器选项或链接器选项。
详细信息,请参阅指定自定义编译器设置和链接器选项 。
当指定依赖文件中的选项发生变更时,C/C++test 将自动重新扫描选项并相应地修改项目。 如果要让 C/C++test 立即更新选项(例如,如果外部配置文件已更改),则点击重置缓存按钮。
使用 Green Hills Software (GHS) 项目中的选项
配置适当设置的步骤:
- 在根项目文件 (.gpj) 字段中,输入您想要开始选项扫描的 Green Hills (
*.gpj
) 项目文件的位置。- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
${project_loc}
解析为 Eclipse 项目位置的绝对路径(包含.project
文件的位置)。如果您的项目具有“链接”源文件夹,即源文件并非实际上存在于项目位置,则不能使用此变量,详细信息请参阅下面框内的内容。${Project_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
将解析为C:\src\source.cpp
。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
- 在项目框中,选择一个项目,然后点击刷新。
- 您可以选择 GPJ 项目层次结构中一个“可测试”的项目(这可能是根节点本身),或者选择根节点(即使它不可测试),以使用兼容模式,该模式旨在支持对“不可测试”项目进行静态分析。
- 有关“可测试”与“不可测试”项目以及兼容性模式的详细信息,请参阅有关 C++test 如何使用 GHS 选项源的其他详细信息。
- 在编译器设置部分,指定编译器可执行文件(用于 C 和 C++ 源项目)、链接器和种类。
- 在选项部分,指定要使用且尚未在项目中指定的任何测试特定或 C/C++test 特定的编译器选项或链接器选项。
- 详细信息请参阅指定自定义编译器设置和链接器选项。
当 GHS 项目文件选项更改时,C++test 将自动重新扫描选项。如果要让 C/C++test 立即更新选项(例如,如果外部配置文件已更改),则点击重置缓存按钮。
有关 C/C++test 如何使用 GHS 选项源的其他详细信息
C/C++test 支持以下类型的 GPJ 项目,这意味着它将使用这些项目类型指定的项目节点视为项目以扫描源和构建选项:
- 项目
- 子项目
- 程序
- 库
- 动态链接库
- 被选中的
- 共享项目
- 独立库
- 完整应用程序
C/C++test 将 GPJ 项目分为两组:
- 可测试:包括程序、库和动态链接库。这些项目类型的工件(可执行文件和库)是人们所熟悉的,C/C++test 可以在其基础上构建一个测试可执行文件。这些是仅有的能够通过 GHS 项目导入器导入的项目种类。
- 不可测试:所有其他受支持的项目类型可用于为其所有源文件和子项目引入构建选项。
根项目是被作为选项扫描开始的顶层项目文件。
对于复杂结构的项目:
- 所有在逻辑项目层级(从根层级开始)第一级的“不可测试”项目被视为一种工作空间,采用它们所引入的选项。
- 可测试项目子项目的子级被视为可测试父级的直接子级;读取由子项目引入的选项。
C 和 C++ 源项目是可测试的。
有两种 GPJ 项目引入的选项:
- 编译器和链接器选项。
- 构建属性(仅用于构建器的选项)不会直接传递给编译工具,而是由 MULTI 构建器本身以特殊方式解释。
对于 C/C++test,特定源文件的构建选项(编译选项和构建属性)包括所有通过指向该源的所有父项目节点收集的选项,以及该源节点本身的所有选项。此外,特定可测试项目的链接选项包括所有通过指向该项目的所有父项目节点收集的选项,以及该可测试项目节点本身的所有选项。
以下是可接受的构建属性,可通过 MULTI 构建选项编辑器指定:
- 相对于这个文件的源文件目录 " (:sourceDir)
- 相对于顶层项目的源文件目录 "(:sourceDirNonRelative)
为向后兼容之前的 C/C++test 版本中提供的 GHS 支持,当前版本的 C/C++test 提供一种兼容模式,无论根项目是什么类型(只要是支持的类型)都始终将其视为可测试的项目。但是,有可能无法基于“不可测试”项目构建一个测试可执行程序;通常有两个原因:
- 扫描到的连接选项无效或不够。
- 基底层源无法组成正确的应用程序(例如,它们包含重复的全局符号名称);这通常发生在包含多个程序和/或库节点的容器式项目中。
兼容模式主要用于对在完整的项目层级中找到的所有可测试源运行静态分析。
使用 Managed Make C/C++ 项目中的选项
配置适当设置的步骤:
- 在配置字段中,选择您想要使用的配置。如果要刷新可用配置的列表,则点击刷新。
- 在种类字段中,选择您的编译器所属的编译器种类。
- 在使用自定义命令部分,指定想要用于 C 编译器、C++ 编译器和/或链接器的所有自定义命令。
- 在选项部分,指定要使用且尚未在项目中指定(例如,作为 Makefile 目标)的任何测试特定或 C/C++test 特定的编译器选项或链接器选项。详细信息请参阅指定自定义编译器设置和链接器选项。
手动指定所有选项
配置适当设置的步骤:
- 在编译器选项字段中,输入您想要使用的编译器选项。
- 在工作目录字段中,输入编译器执行的目录。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
${project_loc}
解析为 Eclipse 项目位置的绝对路径(包含.project
文件的位置)。如果您的项目具有“链接”源文件夹,即源文件并非实际上存在于项目位置,则不能使用此变量,详细信息请参阅下面框内的内容。${Project_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
将解析为C:\src\source.cpp
。
- 使用绝对路径可能会导致项目不具有可移植性。我们建议您使用以下 C/C++test 变量来指定路径:
- 在链接器选项字段中,输入您想要使用的链接器选项。如果未列出您的编译器,请为其添加一个自定义编译器定义(如使用交叉编译器配置测试中所述)。
- 在编译器设置部分,指定编译器可执行文件(用于 C 和 C++ 源项目)、链接器和种类。编译器和链接器设置应保持一致。如果未列出您的编译器,请为其添加一个自定义编译器定义(如使用交叉编译器配置测试中所述)。
执行(仅限文件级)
指定在测试用例执行期间是否对选定的源文件插桩。
要将此设置应用于多个文件,需在项目树中选择相应文件,点击右键并选择 Parasoft> C/C++test> 执行设置 。请注意,当前的设置将会被统一应用到所有选中的文件。
其他设置
C/C++test 临时文件
C/C++test 临时文件字段控制 C/C++test 保存临时数据/文件的位置,例如插桩的源文件、编译的对象、链接的测试可执行文件和自动生成的头文件。此设置控制 {cpptest:testware_loc}
。
C/C++test 可以根据需要自动重新生成这些文件,不需要在团队成员之间共享。因此,这些文件不应保存在项目中或添加到源码控制中。
点击清除按钮可以删除临时数据。我们建议您不要在两次测试运行间隙删除临时数据;保存这些数据可以显著提高性能。
为实现最优性能,请使用本地硬盘上的位置。
高级选项
此表允许指定各个低级选项和调试选项;有关可用选项的列表,请参阅高级插桩配置选项。
源文件的编码
指定在处理源文件时是否应该使用多字节编码。默认情况下,C/C++test 根据当前系统编码(自动模式)自动激活对多字节字符的支持。如需手动控制多字节支持,可将选项值设置为开或关。
请注意,启用多字节字符的支持可能会影响代码分析性能。
范围设置
允许指定不需要测试的项目文件。详细信息请参阅测试用户定义的资源集。