2016-03-21 27 views
5

Sono su una macchina Linux, sto provando a creare un progetto utilizzando cmake che esegue le build di origine. Per la copertura del codice, ho esaminato gcov e ho seguito un semplice tutorial che genera file appropriati per un programma campione helloWorld.cpp. L'unico requisito era compilare con -fprofile-arcs -ftest-coverage bandiere & collegamento con -lgcov bandiera, che può essere fatto del tutto con -coverage bandiera.configurazione della copertura del codice con cmake

Ora arriva la parte difficile. Ho un CMakeLists.txt contenuti spirito come illustrato di seguito:

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}) 

Così ho incluso flags appropriata di compilazione, nonché le bandiere linker troppo e li aggiunto correttamente. Un'altra cosa da notare è la riga set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) che dice che gli eseguibili verranno generati all'interno della directory bin.

Ora tutto funziona come previsto, tranne che i file di copertura non vengono generati correttamente. Seguo seguente procedura:

mkdir build && cd build 
cmake .. 
make -j4 
./bin/runTest 

e nessun altro file viene generato all'interno della cartella bin. Tuttavia su più di ispezione ho scoperto che c'è un altro luogo build/CMakeFiles/runTest.dir/test dove risiede test.cpp.o inizialmente e dopo la fase finale ./bin/runTest, due nuovi file - test.cpp.gcda & test.cpp.gcno sono generati.

Ho già provato a copiare test/test.cpp a build/CMakeFiles/runTest.dir/test e funzionante gcov test.cpp ma non riesce affermando - test.gcno:cannot open notes file

+0

Ho spostato il CMakeLists.txt aggiornato per questa domanda [qui] (https://github.com/agauniyal/rang). chiunque può utilizzare questo repository per una rapida riproduzione. –

+3

Quando i file di origine e i file di dati gcov ('.gcno',' .gcda') si trovano in * diverse * directory, è necessario suggerire 'gcov' dove può trovarli. Ad esempio, puoi passare l'opzione '-o ' a gcov per specificare il percorso dei file di dati. Tutto il resto descritto nella tua domanda post funziona correttamente. – Tsyvarev

+1

possibile dup http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash controlla anche la documentazione qui https://cmake.org/cmake/help/v3.2/ module/CTestCoverageCollectGCOV.html –

risposta

3

Una mancata corrispondenza gcov e la versione gcc stavo facendo questo accada. gcc symlink /usr/bin/gcc è stato impostato su gcc più recente, lo stesso per g++ ma gcov in $PATH stava ancora puntando alla versione precedente di gcov.