Подробное руководство по использованию 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.

36

Решение

Я использую 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 каталог моего дерева сборки.

41

Другие решения

У меня есть ужасный метод, чтобы использовать 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 .
1

Я настроил свой проект «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 в папке сборки

0