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