2016-03-21 24 views
5

Ich bin auf einem Linux-Rechner und versuche, ein Projekt mit CMake zu erstellen, das keine Source-Builds mehr enthält. Für die Quelltextabdeckung habe ich gcov untersucht und ein einfaches Tutorial verfolgt, das entsprechende Dateien für ein Beispielprogramm generiert. Die einzige Anforderung bestand darin, mit -fprofile-arcs -ftest-coverage Flags & Link mit -lgcov Flag zu kompilieren, was insgesamt mit -coverage Flag erfolgen kann.Codeabdeckung mit cmake konfigurieren

Jetzt kommt hier der schwierige Teil. Ich habe einen CMakeLists.txt wit Inhalt wie folgt:

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

Also habe ich entsprechende Kompilierung Flags enthält sowie Linker-Flags zu und die beigefügten sie richtig. Eine andere Sache zu beachten ist set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) Zeile, die besagt, dass ausführbare Dateien innerhalb bin Verzeichnis generiert werden.

Jetzt funktioniert alles wie vorgesehen, außer dass Coverage-Dateien nicht ordnungsgemäß generiert werden. Ich gehen Sie folgendermaßen vor:

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

und keine andere Datei innerhalb bin Ordner generiert. Ich fand jedoch auf mehr Kontrolle heraus, dass es ein anderer Ort ist build/CMakeFiles/runTest.dir/test wo test.cpp.o am Anfang und nach dem letzten Schritt befindet ./bin/runTest, zwei neue Dateien - test.cpp.gcda & test.cpp.gcno erzeugt werden.

Ich habe bereits versucht test/test.cpp zu build/CMakeFiles/runTest.dir/test Kopieren und gcov test.cpp läuft aber es funktioniert nicht unter Angabe - test.gcno:cannot open notes file

+0

Ich habe aktualisiert CMakeLists.txt für diese Frage [hier] (https://github.com/agauniyal/rang) geschoben. Jeder kann dieses Repo für schnelle Repro verwenden. –

+3

Wenn sich Quelldateien und gcov -Datendateien ('.gcno',' .gcda') in * verschiedenen * Verzeichnissen befinden, müssen Sie 'gcov' angeben, wo sie sie finden können. ZB können Sie die Option '-o ' an ​​gcov übergeben, um den Speicherort von Datendateien anzugeben. Alles andere, was in Ihrem Fragenpost beschrieben wird, funktioniert korrekt. – Tsyvarev

+1

möglich dup http://stackoverflow.com/questions/13116488/detailed-guide-on-using-gcov-with-cmake-cdash auch Dokumentation hier https://cmake.org/cmake/help/v3.2/ module/CTestCoverageCollectGCOV.html –

Antwort

3

eine Nichtübereinstimmung in gcov und gcc-Version wurde die dies möglich gemacht. gcc Symlink /usr/bin/gcc wurde auf den neuesten gcc gesetzt, das gleiche für g++ aber gcov in $PATH war immer noch auf ältere Version von gcov.