首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CMake/CDash中使用gcov?

如何在CMake/CDash中使用gcov?
EN

Stack Overflow用户
提问于 2012-10-29 13:48:34
回答 4查看 41.4K关注 0票数 55

我在我的项目中使用了CMake,并设置了一个用于连续/夜间构建的cdash服务器。一切运行良好,通过设置crontab,我们可以将每小时/每晚的构建/测试结果自动上载到我们的cdash服务器。

我的下一步是将测试覆盖报告添加到构建中。我在这里找到了http://www.cmake.org/Wiki/CTest:Coverage文档,但坦率地说,它与实用指南相去甚远。

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

代码语言:javascript
复制
make NightlyCoverage

似乎什么也做不了。谁能告诉我下一步要做什么?我想要的结果是,通过执行make NightlyCoverage,覆盖报告被生成并上传到cdash服务器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-14 14:22:07

我已经成功地使用了https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake

只需遵循以下指导原则:将文件添加到我的CMAKE_MODULE_PATH目录中,添加

代码语言:javascript
复制
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作为我的目标的依赖项:

代码语言:javascript
复制
if(CMAKE_COMPILER_IS_GNUCXX)
    target_link_libraries(${PROJECT_TEST_NAME} gcov)
endif()

有了这个,我只需输入

代码语言:javascript
复制
make my_project_coverage

我在我的构建树的coverage目录中得到了html报告。

票数 56
EN

Stack Overflow用户

发布于 2017-09-15 14:23:06

我使用gcovr制作了一个没有CodeCoverage.cmakeGCC代码覆盖率报告

代码语言:javascript
复制
$ cd /path/to/your/project
$ mkdir build && cd build && cmake ..
$ make && make test
$ gcovr -r ../ .
票数 8
EN

Stack Overflow用户

发布于 2019-01-02 17:45:09

我用下面的方式设置了我的项目'foo‘。将cmake文件从https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake复制到子目录'cmake_modules‘。在add_executable(foo ...)之后的CMakeLists.txt文件中,我添加了以下内容:

代码语言:javascript
复制
if(CMAKE_COMPILER_IS_GNUCXX)
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules")
include(CodeCoverage)
APPEND_COVERAGE_COMPILER_FLAGS()
set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') // this is optional if you want to exclude some directory from the report
SETUP_TARGET_FOR_COVERAGE_LCOV(NAME foo_coverage
                              EXECUTABLE foo
                              DEPENDENCIES foo)
endif()

在cmake之后,构建目标make make foo_coverage,并使用build文件夹中foo_coverage文件夹中的index.html文件打开报表

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13116488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档