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