我在我的项目中使用了CMake,并设置了一个用于连续/夜间构建的cdash服务器。一切运行良好,通过设置crontab,我们可以将每小时/每晚的构建/测试结果自动上载到我们的cdash服务器。
我的下一步是将测试覆盖报告添加到构建中。我在这里找到了http://www.cmake.org/Wiki/CTest:Coverage文档,但坦率地说,它与实用指南相去甚远。
目前我已经添加了required标志(而不是-fprofile-arcs -ftest-coverage,我发现--coverage更好),编译过程生成.gcno文件。但之后我就卡住了。该命令
make NightlyCoverage似乎什么也做不了。谁能告诉我下一步要做什么?我想要的结果是,通过执行make NightlyCoverage,覆盖报告被生成并上传到cdash服务器。
发布于 2013-05-14 14:22:07
我已经成功地使用了https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake。
只需遵循以下指导原则:将文件添加到我的CMAKE_MODULE_PATH目录中,添加
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作为我的目标的依赖项:
if(CMAKE_COMPILER_IS_GNUCXX)
target_link_libraries(${PROJECT_TEST_NAME} gcov)
endif()有了这个,我只需输入
make my_project_coverage我在我的构建树的coverage目录中得到了html报告。
发布于 2017-09-15 14:23:06
我使用gcovr制作了一个没有CodeCoverage.cmake的GCC代码覆盖率报告:
$ cd /path/to/your/project
$ mkdir build && cd build && cmake ..
$ make && make test
$ gcovr -r ../ .发布于 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文件中,我添加了以下内容:
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文件打开报表
https://stackoverflow.com/questions/13116488
复制相似问题