Я нахожусь на машине linux, пытаясь построить проект с использованием cmake, который выходит из исходных построений. Для покрытия кода я просмотрел gcov и пошел по простому учебному курсу, который генерирует соответствующие файлы для образца helloWorld.cpp
. Требовалось только с -fprofile-arcs -ftest-coverage
флаги & ссылка с флагом -lgcov
, что может быть сделано в целом с -coverage
флагом.настройка покрытия кода с помощью cmake
Теперь здесь сложная часть. У меня есть CMakeLists.txt
содержания остроумия, как показано ниже:
cmake_minimum_required (VERSION 2.8)
project (SomeName)
SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
include_directories(include)
set(CATCH_HEADER_PATH ${PROJECT_SOURCE_DIR}/test/catch.hpp)
add_executable(runTest ${PROJECT_SOURCE_DIR}/test/test.cpp ${CATCH_HEADER_PATH})
Так я включил флаги времени соответствующих компиляций, а также флаги компоновщика тоже и приложил их правильно. Еще одна вещь, которую следует отметить, - это строка set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
, в которой говорится, что исполняемые файлы будут сгенерированы внутри bin
.
Теперь все работает должным образом, за исключением того, что файлы покрытия не генерируются должным образом. Я выполните следующие действия:
mkdir build && cd build
cmake ..
make -j4
./bin/runTest
и никакой другой файл не генерируется внутри bin
папку. Однако на более осмотре я обнаружил, что есть другое место build/CMakeFiles/runTest.dir/test
где test.cpp.o
находится в начале и после заключительного этапа ./bin/runTest
, два новых файла - test.cpp.gcda
& test.cpp.gcno
генерируется.
Я уже пробовал копировать test/test.cpp
в build/CMakeFiles/runTest.dir/test
и работает gcov test.cpp
но она не о том, - test.gcno:cannot open notes file
Я нажал обновленный CMakeLists.txt для этого вопроса [здесь] (https://github.com/agauniyal/rang). любой может использовать это репо для быстрого воспроизведения. –
Когда исходные файлы и файлы данных gcov ('.gcno',' .gcda') находятся в * разных * каталогах, вам нужно навести 'gcov', где они могут их найти. Например, вы можете передать опцию '-o' в gcov, чтобы указать расположение файлов данных. Все, что описано в вашем вопросе, работает правильно. –
Tsyvarev
возможно dup http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash также проверьте документацию здесь https://cmake.org/cmake/help/v3.2/ module/CTestCoverageCollectGCOV.html –