CMake Gcov c++ 创建错误的 .gcno 文件

CMake Gcov c++ creating wrong .gcno files

我有一个 CMakeLists.txt 文件,我在其中添加了:

set(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage -pthread -std=c++11 -O0 ${CMAKE_CXX_FLAGS}")

正在生成报告文件:

project_root/build/CMakeFiles/project.dir/

但它生成的文件具有扩展名 .cpp.gcno.cpp.gcda.cpp.o.

此外,它们与 src 文件不在同一个文件夹中,它们位于:

project_root/src/ 

当我将报告文件移动到 src/ 文件夹并执行时

$ gcov main.cpp
main.gcno:cannot open notes file

但我收到了错误消息。所以我将 .cpp.gcno.cpp.cdnacpp.o 更改为 .gcno.gcda.o,最后我得到以下内容:

gcov main.cpp
Lines executed:86.67% of 15
Creating 'main.cpp.gcov'

我有 50 多个文件,无法对每个文件手动执行此操作。

我需要能够 运行 对所有文件执行一次 gcov 并为所有文件生成报告。我不关心文件是在哪里生成的。

It is generating the report files in: project_root/build/CMakeFiles/project.dir/

这是为 'project' 可执行文件构建所有附加文件的目录。

BUT the files it generates have extentions '.cpp.gcno', '.cpp.gcda' and '.cpp.o'

这是因为 CMake 从 .cpp 源创建了 .cpp.o 目标文件(您可能会看到 运行 生成 VERBOSE=1。根据 -fprofile-arcs option's description,数据文件有后缀 .cpp.gcno.

Also, they are not in the same folder as the src files

数据文件与对象文件创建在同一目录中。


实际上,创建的文件仍然有效,如果您调用

gcov main.cpp.gcno

来自包含 .gcno 个文件的目录。

显然,添加扩展名的标准 CMake 行为 .cpp.o 可以更改为替换扩展名 .o 使用:

set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON)