使用的gcov通过CMake / CDASH详细指南?(Detailed guide on usin

2019-06-18 16:24发布

我使用CMake的与我的项目,并成立了连续/每晚建设CDASH服务器。 一切运作良好,并通过建立一个crontab,我们每小时/每晚编译自动上传到我们的服务器CDASH /测试结果。

我的下一步是添加测试覆盖率报告生成。 我发现这里的文档http://www.cmake.org/Wiki/CTest:Coverage但坦率地说这是一个有点远的实用指南。

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

make NightlyCoverage

似乎没有做任何事情。 有谁告诉我是做什么的未来? 我想要的结果,是通过做make NightlyCoverage ,生成并上传到服务器CDASH覆盖率报告。

Answer 1:

我一直在使用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我的构建树的目录。



Answer 2:

我有一个丑陋的方法使用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 .


Answer 3:

我在下面的方式建立我的项目“富”。 从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文件报告



文章来源: Detailed guide on using gcov with CMake/CDash?