c++ - gcov 与 CMake 使用单独的构建目录

标签 c++ cmake gcov

我正在努力获取 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/

相关文章:

c++ - 删除堆上存储数据的堆上对象

c++ - 正确释放 SDL_Surface?

c++ - 为什么在 C++11 中的类型参数包之后不允许使用整数值参数包?

c++ - 如何在 Visual Studio 中为 Cmake 项目添加 Linux 编译

cmake:如何在不链接的情况下定义目标(仅编译)

c++ - 如何创建大地形/景观

c++ - 如何使用 CMake 正确设置动态库路径?

c - C 源代码的 GCOV 静态库覆盖率

c - GCC 的代码覆盖率选项如何工作?

c++ - .gcda 文件不会在多次运行时合并