Подробное руководство по использованию gcov с CMake/CDash?

Я использую CMake с моим проектом и создаю cdash-сервер для непрерывного/ночного строительства. Все работает хорошо, и, создав crontab, у нас есть ежечасные/ночные сборки/результаты теста, загруженные на наш cdash-сервер автоматически.

Мой следующий шаг - добавить отчет о тестировании в сборку. Я нахожу здесь документ http://www.cmake.org/Wiki/CTest:Coverage, но, откровенно говоря, он немного далек от практического руководства.

В настоящее время я добавил обязательный флаг (вместо -fprofile-arcs -ftest-coverage, я нахожу --coverage лучше), процесс компиляции генерирует файлы .gcno. Но тогда я застрял. Команда

make NightlyCoverage

похоже, ничего не делает. Может ли кто-нибудь сказать мне, что делать дальше? Результат, который я хочу, - это сделать make NightlyCoverage, отчеты о покрытии создаются и загружаются на сервер cdash.

Ответ 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 моего дерева сборки.

Ответ 2

Я настроил свой проект "foo" следующим образом. Скопировал файл 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 И откройте отчет с файлом index.html в папке foo_coverage в папке сборки

Ответ 3

Я использую gcovr для создания отчета об охвате кода GCC без CodeCoverage.cmake:

$ cd /path/to/your/project
$ mkdir build && cd build && cmake ..
$ make && make test
$ gcovr -r ../ .