gcov with CMake using a separate build directory

Bjoern picture Bjoern · May 22, 2011 · Viewed 12.7k times · Source

I'm struggling to get coverage information for gcov. No errors during compilation and linking, but when I run the executable, no coverage data is produced.

I'm using CMake with a separate build directory, passing flags to the compiler and linker in this way:

add_definitions(--coverage)
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} " --coverage")

Does the executable expect the source code to be in a specific location? What do I have to add to my CMakeLists.txt to get things going?

Kind regards, Bjoern

Answer

delcypher picture delcypher · Feb 23, 2012

CMake seems to put the code coverage (*.gcda, *.gcdo) files with the object files of your project. If your executable was named "tester" then they would appear in the following path

${CMAKE_BINARY_DIR}/CMakeFiles/tester.dir/

CMake seems to name the source files in a way that isn't very compatible with gcov though. For example if I had a source file called "mytestprog.cpp" it would be build

mytestprog.cpp.o
mytestprog.cpp.gcda
mytestprog.cpp.gcdno

where as gcov seems to expect

mytestprog.gcda
mytestprog.gcdno

I'm not really sure how to fix it. I've tried using LCov instead and that "appeared" to work but I'm not really sure if it did.