本节介绍如何将 C/C++test 与 Bazel 构建集成以运行静态分析和代码覆盖率。
C/C++test 的干净安装不会立即作为 Bazel 本地资源库工作。需按照以下步骤将 C/C++test 安装目录添加为 Bazel 本地资源库。
integration/bazel
目录的 WORKSPACE.bazel 和 BUILD.bazel 文件放到 C/C++test 安装程序的根目录中。cd <INSTALL_DIR> mv integration/bazel/WORKSPACE.bazel . mv integration/bazel/BUILD.bazel . |
integration/bazel
目录中。在您的 WORKSPACE 文件中将 C/C++test 安装目录注册为 Bazel 本地资源库。
local_repository(name = "cpptest", path = "<INSTALL_DIR>") |
以下示例将用于后续步骤:
cc_binary( name = "hello-world", srcs = ["hello-world.cc"], deps = [ ":hello-greet", ], ) |
运行 "@cpptest
//:bdf
" 规则生成 BDF 文件。
bazel run @cpptest//:bdf --@cpptest//:target=//:hello-world --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:project-name=HelloWorld |
将在您的项目根目录中生成一个 BDF 文件。该集成还会生成使 C/C++test Professional 能够将您的项目作为 C/C++test 项目打开的必要文件。
将项目导入您的 Eclipse 工作空间并运行分析。
cpptestcli -data /path/to/workspace -import . -config "builtin://Recommended Rules" |
|
按照以下步骤生成包含代码覆盖率插桩的测试二进制文件。
运行 "@cpptest//:coverage" 规则,生成插桩的二进制文件。
bazel run @cpptest//:coverage --@cpptest//:target=//:hello-world --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:line-coverage |
|
执行插桩的二进制文件。
./bazel-bin/hello-world.elf |
将项目导入到您的 Eclipse 工作空间中,生成覆盖率报告。
cpptestcli -data /path/to/workspace -import . -config "builtin://Load Application Coverage" |
注意:
您可以使用 .psrc 配置文件配置覆盖率插桩工具(cpptestcc)。
将该 .psrc 示例文件复制到项目中。
cp <INSTALL_DIR>/integration/bazel/cpptestcc-bazel.psrc <PROJECT_ROOT>/cpptestcc-bazel.psrc |
cpptestcc -help |
在 BUILD.bazel 文件中定义引用 cpptestcc-bazel.psrc 文件的“cpptestcc-bazel-psrc”文件组。
filegroup(name = "cpptestcc-bazel-psrc", srcs = ["cpptestcc-bazel.psrc"], visibility = ["//visibility:public"]) |
在执行“@cpptest//:coverage”规则时,使用“--@cpptest//:psrc_file”选项与“cpptestcc-bazel-psrc”文件组。
bazel run @cpptest//:coverage --@cpptest//:target=//:hello-world --@cpptest//:psrc_file=//:cpptestcc-bazel-psrc |
选项 | 说明 |
---|---|
--@cpptest//:target=<TARGET> | 指定要分析的目标规则。应指定类型为“cc_*”或属于该类型派生类型的项目规则。 |
--@cpptest//:psrc_file=<CUSTOM_PSRC_FILEGROUP> | 指定 .psrc 配置文件的文件组;请参阅配置覆盖率插桩工具(cpptestcc)。 |
选项 | 说明 |
---|---|
--@cpptest//:project-name=<NEW_PROJECT_NAME> | 更改生成的 BDF 文件的名称。 |
--@cpptest//:missing-bazel-dirs="external","<DIRS>" | 指定解析过程中发现的目录路径的开头。在 BDF 中,该路径将以“bazel-[project-name]”为前缀。 |
选项 | 说明 |
---|---|
--@cpptest//:compiler-config=<COMPILER_CONFIGURATION_NAME> | 指定编译器配置。 |
--@cpptest//:line-coverage --@cpptest//:mcdc-coverage --@cpptest//:optimized-line-coverage --@cpptest//:function-coverage --@cpptest//:optimized-function-coverage --@cpptest//:statement-coverage --@cpptest//:optimized-statement-coverage --@cpptest//:block-coverage --@cpptest//:optimized-block-coverage --@cpptest//:simple-condition-coverage --@cpptest//:optimized-simple-condition-coverage --@cpptest//:path-coverage --@cpptest//:decision-coverage --@cpptest//:optimized-decision-coverage --@cpptest//:call-coverage --@cpptest//:optimized-call-coverage | 启用特定的覆盖率指标。 除非已在 .psrc 文件中指定,否则必须指定此参数;请参阅配置覆盖率插桩工具(cpptestcc)。
|
--@cpptest//:verbose | 为 cpptestcc 插桩和编译的所有阶段启用详细的控制台输出。 |
--@cpptest//:quiet | 在执行过程中抑制 cpptest 引擎输出的所有控制台文本。 |
--@cpptest//:project-name=<NEW_PROJECT_NAME> | 更改 Eclipse 项目文件的名称:.project 和 .parasoft。 |
--@cpptest//:project-workspace=<PROJECT_WORKSPACE> | 提供用于分析和报告的临时 Eclipse 工作空间的位置。 |