我正在努力获取 gcov 的覆盖信息。编译和链接期间没有错误,但是当我运行可执行文件时,没有生成覆盖率数据。
我将 CMake 与单独的构建目录一起使用,以这种方式将标志传递给编译器和链接器:
add_definitions(--coverage)
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} " --coverage")
可执行文件是否期望源代码位于特定位置? 我必须向我的 CMakeLists.txt 添加什么才能让事情顺利进行?
亲切的问候, 比约恩
最佳答案
CMake 似乎将代码覆盖率(*.gcda、*.gcdo)文件与项目的目标文件放在一起。如果您的可执行文件名为“tester”,那么它们将出现在以下路径中
${CMAKE_BINARY_DIR}/CMakeFiles/tester.dir/
CMake 似乎以一种与 gcov 不太兼容的方式命名源文件。例如,如果我有一个名为“mytestprog.cpp”的源文件,它将被构建
mytestprog.cpp.o
mytestprog.cpp.gcda
mytestprog.cpp.gcdno
gcov 似乎期望的地方
mytestprog.gcda
mytestprog.gcdno
我不太确定如何修复它。我试过改用 LCov,它“似乎”起作用了,但我不确定它是否起作用。
关于c++ - gcov 与 CMake 使用单独的构建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089140/