作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Waf 构建一个 C 项目,并使用 gcov
进行一些测试代码覆盖。但是,Waf 调用 gcc
的方式会从源文件 foo.c
生成 foo.c.1.o
,这会混淆 gcov
搜索生成的文件时:
$ gcov foo.c
$ foo.gcno:cannot open graph file
幸运的是,gcov
具有-o
选项,可以指定相应的目标文件。然而,这并不方便,执行 lcov
仍然失败。因此,我的问题是:
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/
我是一名优秀的程序员,十分优秀!