CTestCoverageCollectGCOV

版本 3.2 中新增。

此模块旨在用于 CTest 仪表板脚本,并提供一个命令来生成包含代码覆盖率报告的 tarball。

使用以下命令在 CTest 脚本中加载此模块:

include(CTestCoverageCollectGCOV)

命令

此模块提供以下命令

ctest_coverage_collect_gcov

运行 gcov 并为 CDash 打包 tar 文件

ctest_coverage_collect_gcov(
  TARBALL <tar-file>
  [TARBALL_COMPRESSION <compression>]
  [SOURCE <source-dir>]
  [BUILD <build-dir>]
  [GCOV_COMMAND <gcov-command>]
  [GCOV_OPTIONS <options>...]
  [GLOB]
  [DELETE]
  [QUIET]
)

此命令在二进制树中查找所有 .gcda 文件并运行 gcov,然后将生成的 .gcov 文件与以下内容一起打包成一个 tar 文件:

  • data.json 文件,其中定义了 CDash 使用的源目录和构建目录。

  • Labels.json 文件,指示已在源文件上设置的任何 LABELS

  • uncovered 目录,其中包含 CTEST_EXTRA_COVERAGE_GLOB 找到的任何未覆盖文件。

生成的 tar 文件可以使用 ctest_submit(CDASH_UPLOAD) 命令提交到 CDash 进行显示。

参数为

TARBALL <tar-file>

指定稍后上传到 CDash 的 .tar 文件的位置。相对路径将相对于顶层构建目录进行解释。

TARBALL_COMPRESSION <compression>

在 3.18 版本中新增。

TARBALL 数据文件指定压缩算法。使用此选项可以减小提交到 CDash 的数据文件大小。<compression> 必须是 GZIPBZIP2XZZSTDFROM_EXT 之一,或者一个 CMake 评估为 FALSE 的表达式。默认值为 BZIP2

如果指定了 FROM_EXT,则生成的文件的压缩将基于 <tar-file> 的文件扩展名(即 .tar.gz 将使用 GZIP 压缩)。将产生压缩输出的文件扩展名包括 .tar.gz.tgz.tar.bzip2.tbz.tar.xz.txz

SOURCE <source-dir>

指定构建的顶层源目录。默认为 CTEST_SOURCE_DIRECTORY 的值。

BUILD <build-dir>

指定构建的顶层构建目录。默认为 CTEST_BINARY_DIRECTORY 的值。

GCOV_COMMAND <gcov-command>

指定机器上 gcov 命令的完整路径。默认为 CTEST_COVERAGE_COMMAND 的值。

GCOV_OPTIONS <options>...

指定要传递给 gcov 的选项。gcov 命令的运行方式为 gcov <options>... -o <gcov-dir> <file>.gcda。如果未指定,则默认选项为 -b -x

GLOB

3.6 版本新增。

<build-dir> 中递归搜索 .gcda 文件,而不是通过读取 CMakeFiles/TargetDirectories.txt(CMake 在生成阶段生成的文件)来确定搜索位置。

DELETE

3.6 版本新增。

在覆盖率文件被打包到 .tar 后删除它们。

QUIET

抑制此命令否则会打印的非错误消息。

版本 3.3 中添加: 添加了对 CTEST_CUSTOM_COVERAGE_EXCLUDE 变量的支持。

示例

ctest -S 脚本中生成打包为 .tar.gz 文件的代码覆盖率数据

script.cmake
include(CTestCoverageCollectGCOV)

ctest_coverage_collect_gcov(
  TARBALL "${CTEST_BINARY_DIRECTORY}/gcov.tar.gz"
  TARBALL_COMPRESSION "GZIP"
)