6

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

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

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

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

2 回答 2

7

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

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

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

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使用的临时文件。lcovgenhtml

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

于 2013-02-26T12:40:17.217 回答
0

您是否尝试过使用类似的方式修改 Waf 的配置

bld.program(
  obj_ext  = '.o',
  source   = 'test.c',
  target   = 'test1')
于 2012-08-13T14:43:00.710 回答