我正在使用 Waf 构建一个 C 项目,并使用 gcov
进行一些测试代码覆盖。但是,Waf 调用 gcc
的方式会从源文件 foo.c
生成 foo.c.1.o
,这会混淆 gcov
搜索生成的文件时:
$ gcov foo.c
$ foo.gcno:cannot open graph file
幸运的是,gcov
具有-o
选项,可以指定相应的目标文件。然而,这并不方便,执行 lcov
仍然失败。因此,我的问题是:
- 为什么 Waf 重命名对象文件?
- 如何禁用或...
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/