2016-03-21 3 views
5

Я нахожусь на машине 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

+0

Я нажал обновленный CMakeLists.txt для этого вопроса [здесь] (https://github.com/agauniyal/rang). любой может использовать это репо для быстрого воспроизведения. –

+3

Когда исходные файлы и файлы данных gcov ('.gcno',' .gcda') находятся в * разных * каталогах, вам нужно навести 'gcov', где они могут их найти. Например, вы можете передать опцию '-o ' в gcov, чтобы указать расположение файлов данных. Все, что описано в вашем вопросе, работает правильно. – Tsyvarev

+1

возможно dup http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash также проверьте документацию здесь https://cmake.org/cmake/help/v3.2/ module/CTestCoverageCollectGCOV.html –

ответ

3

несовпадение gcov и НКУ версия делает это произошло. gcc symlink /usr/bin/gcc был настроен для новейших gcc, тот же для g++, но gcov в $PATH все еще указывает на более раннюю версию gcov.

Смежные вопросы