c - 如何防止Waf重命​​名目标文件?

标签 c gcov waf

我正在使用 Waf 构建一个 C 项目,并使用 gcov 进行一些测试代码覆盖。但是,Waf 调用 gcc 的方式会从源文件 foo.c 生成 foo.c.1.o,这会混淆 gcov 搜索生成的文件时:

$ gcov foo.c
$ foo.gcno:cannot open graph file

幸运的是,gcov 具有-o 选项,可以指定相应的目标文件。然而,这并不方便,执行 lcov 仍然失败。因此,我的问题是:

  1. 为什么 Waf 重命名对象文件?
  2. 如何禁用或...
  3. gcov/lcov 如何解决这个问题?

最佳答案

您可以使用 gcovr而不是直接运行 gcov

gcovr 不依赖于文件名魔术,而是解析 gcov 的覆盖文件。
然后使用适当的参数调用 gcov
这对 Waf 的目标文件重命名非常有效。

您可以从 Waf 的 build 子目录运行 gcovr:

cd build
gcovr --root=$(pwd) --keep
lcov --capture --directory $(pwd) --base-directory $(pwd) --output-file coverage.info
genhtml coverage.info --output-directory out

--root选项移除当前目录前缀
--keep 选项保留 gcov 的临时文件,供 lcov/genhtml 使用。

您还可以使用gcovr--xml 选项来生成Cobertura - 兼容的 xml 输出。
然后它可以被各种格式化程序使用(我将它与 Jenkins 的 Cobertura Plugin 一起使用)

关于c - 如何防止Waf重命​​名目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11936226/

相关文章:

c++ - 使用 CXX 社区插件在 Sonarqube-5.6.6(LTS) 中导入 Gcov 报告

c++ - 将 Gcov 与 CMake 和 Catch 结合使用

c++ - 交叉编译: check if it is possible to build 32 bit on a 64 bit machine

c++ - 使用 Waf 在 Windows 上构建 NITRO NITF 库

c - 警告 : unknown conversion type character ‘T’ in format [-Wformat]

c - 生成随机线性无关二元 vector 的问题

c - 禁食期警告 :"Arithmetic Overflow: 32-bit value is shifted, then cast to 64-bit value."

c - 如何在C中读取以空格分隔的n个数字

c++ - gcc9 和 lcov 的覆盖范围

c++ - 当我使用 "./waf"时ndnSIM2.0出现错误