在 CMake/CDash 中使用 gcov 的详细指南?

2021-12-15 00:00:00 testing code-coverage cmake c++ cdash

我在我的项目中使用 CMake,并为连续/夜间构建设置了一个 cdash 服务器.一切正常,通过设置 crontab,我们可以将每小时/每晚的构建/测试结果自动上传到我们的 cdash 服务器.

I'm using CMake with my project and set up a cdash server for continuous/nightly building. Everything works well and by setting up a crontab, we have hourly/nightly build/test results uploaded to our cdash server automatically.

我的下一步是将测试覆盖率报告添加到构建中.我在这里找到文档 http://www.cmake.org/Wiki/CTest:Coverage 但坦率地说,这离实用指南还差得很远.

My next step is to add test coverage report to the build. I find the document here http://www.cmake.org/Wiki/CTest:Coverage but frankly it's a bit far from a practical guide.

目前我已经添加了所需的标志(而不是 -fprofile-arcs -ftest-coverage,我发现 --coverage 更好),编译过程生成 ..gcno 文件.但后来我被卡住了.命令

Currently I've added the required flag (instead of -fprofile-arcs -ftest-coverage, I find --coverage better), the compilation process generates .gcno files. But then I'm stuck. The command

make NightlyCoverage

好像什么都没做.谁能告诉我接下来要做什么?我想要的结果是通过执行 make NightlyCoverage,生成覆盖报告并上传到 cdash 服务器.

doesn't seem to do anything. Could anybody tell me what is the next to do? The result that I want, is by doing make NightlyCoverage, coverage reports are generated and uploaded to cdash server.

推荐答案

我一直在使用 https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake 成功.

I've been using https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake successfully.

只是按照指导方针:将文件添加到我的CMAKE_MODULE_PATH目录,添加

Just followed the guidelines: added the files to my CMAKE_MODULE_PATH directory, added

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
if(CMAKE_COMPILER_IS_GNUCXX)
    include(CodeCoverage)
    setup_target_for_coverage(${PROJECT_NAME}_coverage ${PROJECT_TEST_NAME} coverage)
endif()

在我的 CMakeLists.txt 中.我还手动添加了 gcov 作为目标的依赖项:

in my CMakeLists.txt. I also added manually gcov as a dependency for my target:

if(CMAKE_COMPILER_IS_GNUCXX)
    target_link_libraries(${PROJECT_TEST_NAME} gcov)
endif()

有了这个,我只需输入

make my_project_coverage

然后我在构建树的 coverage 目录中获得了 html 报告.

and I get the html report in the coverage directory of my build tree.

相关文章