具有覆盖范围的 CMake ninja 将 gcno 文件放在根二进制目录中

Posted

技术标签:

【中文标题】具有覆盖范围的 CMake ninja 将 gcno 文件放在根二进制目录中【英文标题】:CMake ninja with coverage puts gcno files in root binary directory 【发布时间】:2019-07-19 12:56:22 【问题描述】:

我正在使用 ninja 生成器通过 cmake 构建一个项目,并构建我的项目以覆盖 add_compile_options("$<$<CONFIG:COVERAGE>:-g;-O0;-ftest-coverage;-fprofile-arcs;-fno-builtin>")。发生的情况是我的 gcno 文件放在 $CMAKE_BINARY_DIR 中,而不是放在相应的目标目录中,例如 $CMAKE_BINARY_DIR/CMakeFiles/Project.dir

这种差异的含义是我现在不能拥有同名的源文件。

当我使用 makefile 构建同一个项目时,gcno 文件最终会出现在这些文件夹中。我检查了它在命令行中所做的不同调用,区别如下。这绝对是工作目录的变化。

如何告诉 ninja 也将 gcno 文件放在相应的项目目录中?

制作

cd C:/my_project/MASTER/build/EXTERNAL_3RDPARTY/blake2 && C:/qnx700/host/win64/x86_64/usr/bin/qcc.exe -Vgcc_ntox86_64  -IC:/C:/my_project/3RDPARTY/blake2/src  -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wall -Wextra -pedantic -Wmissing-declarations -Wunused -Wpedantic -Wlogical-op -Wdouble-promotion -Wformat=2 -fmessage-length=0 -fno-exceptions -march=broadwell -g -O0 -ftest-coverage -fprofile-arcs -fno-builtin -std=c11 -o CMakeFiles/libblake2.dir/src/blake2/blake2b.c.o -c C:/my_project/3RDPARTY/blake2/src/blake2/blake2b.c

忍者:

C:\qnx700\host\win64\x86_64\usr\bin\qcc.exe -Vgcc_ntox86_64 -IC:/C:/my_project/3RDPARTY/blake2/src -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wall -Wextra -pedantic -Wmissing-declarations -Wunused -Wpedantic -Wlogical-op -Wdouble-promotion -Wformat=2 -fmessage-length=0 -fno-exceptions -march=broadwell -g -O0 -ftest-coverage -fprofile-arcs -fno-builtin -std=c11 -Wp,-MD,EXTERNAL_3RDPARTY\blake2\CMakeFiles\libblake2.dir\src\blake2\blake2b.c.o.d -Wp,-MT,EXTERNAL_3RDPARTY/blake2/CMakeFiles/libblake2.dir/src/blake2/blake2b.c.o -Wp,-MF,EXTERNAL_3RDPARTY\blake2\CMakeFiles\libblake2.dir\src\blake2\blake2b.c.o.d -o EXTERNAL_3RDPARTY/blake2/CMakeFiles/libblake2.dir/src/blake2/blake2b.c.o -c C:/my_project/3RDPARTY/blake2/src/blake2/blake2b.c

【问题讨论】:

【参考方案1】:

我们进行了更多研究,得出的结论是 qcc.exe 包装器是实际问题。使用 gcc.exe 直接解决问题。

【讨论】:

以上是关于具有覆盖范围的 CMake ninja 将 gcno 文件放在根二进制目录中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 Ninja 生成器的 CMake 将修饰符标志传递给存档文件(ar)

C++学习(四四二)cmake ninja build.ninja rules.ninja

在 macOS 上使用 Ninja 进行 CMake GUI

获取 CMake 的 Ninja 测试命令

CMake 找不到 Ninja

CMake/Ninja 试图编译已删除的“.cpp”文件