我使用CMake的与我的项目,并成立了连续/每晚建设CDASH服务器。 一切运作良好,并通过建立一个crontab,我们每小时/每晚编译自动上传到我们的服务器CDASH /测试结果。
我的下一步是添加测试覆盖率报告生成。 我发现这里的文档http://www.cmake.org/Wiki/CTest:Coverage但坦率地说这是一个有点远的实用指南。
目前,我已经添加了必需的标志(而不是-fprofile-arcs -ftest-coverage
,我发现--coverage
更好),编译过程中产生.gcno文件。 但后来,我被卡住。 命令
make NightlyCoverage
似乎没有做任何事情。 有谁告诉我是做什么的未来? 我想要的结果,是通过做make NightlyCoverage
,生成并上传到服务器CDASH覆盖率报告。
我一直在使用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
我得到的HTML报告coverage
我的构建树的目录。
我有一个丑陋的方法使用gcovr
做出GCC代码覆盖率报告未经CodeCoverage.cmake
:将所有*.gcno
和*.gcda
文件到项目的根目录,然后运行gcovr
$ cd /path/to/your/project
$ mkdir build && cd build && cmake ..
$ make && make test
$ find . -type f \( -iname \*.gcno -or -iname \*.gcda \) -exec cp {} .. \;
$ cd ..
$ gcovr -v -r .
我在下面的方式建立我的项目“富”。 从CMake的文件复制https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake到子目录“cmake_modules”。 在之后的CMakeLists.txt文件add_executable(foo ...)
我增加了以下内容:
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的后,构建目标做出让foo_coverage并打开在build文件夹中的文件夹foo_coverage index.html文件报告