我正在使用gcov和gcovr来生成我的代码测试覆盖率(测试是使用google test ++完成的)。所以,我使用-ftest-coverage -fprofile-arcs选项进行编译,然后运行gcovr(它本身运行gcov)。但是,在我的输出中,我有cpp文件,封面为100%,但也有.h文件,即使它们没有可执行代码,因此它们的覆盖率为0%。
这个0%没有任何意义,因此,我想从coverage输出中删除.h文件。我找不到任何关于那个......
我已经尝试在govr选项中添加:-e“* .h”,以排除扩展名为.h的文件,但它不起作用(它实际上排除了所有内容......)。
有人有想法吗?
谢谢 !!
我也在努力解决这个问题,现在找到了正确的解决方案。这里有一个例子和工作方式:
运行gcov时,使用选项-o coverage.xml
,然后打开文件。找到要排除的文件名并复制文件名。
在链接后在浏览器中打开,并将整个文件名复制到以下部分:TEST STRING
https://regex101.com/
现在,它说:REGULAR EXPRESSION,创建一个正则表达式,使整个文件名为蓝色。确保此表达式不适用于需要在coverage报告中显示的其他文件。
这里有一些基本规则:通常,对于“某些字符”,你可以使用".*"
与* .cpp类型的文件无关,你想在哪里看到cpp文件!因此,如果你想排除像"<some characters>include<more characters>"
这样的东西,那么你可以使用".*include.*"
。这也将排除一些像include.cpp这样的文件名
因为.
在正则表达式中有意义,所以使用\.
所以如果要排除"<something>.h"
文件,请使用".*\.h"
示例对我有用:(排除包含文件和测试框架以及linux include目录并排除jenkins文件)
另外我想排除任何带有单词test的cpp文件,我可以用".*test[_-[A-Z|a-z]*\.cpp"
做什么
真人生活的例子:
gcovr --xml -e ".*unit_test\.cpp" -e ".*\.h" -e ".*usr/include/.*" -e ".*jenkins.*" -e ".*test[_-|A-Z|a-z]*\.cpp" -o coverage.xml
玩得开心!
只需使用-e来排除你的文件..
你的命令看起来像
gcovr -r . -e "include.*" --html --html-details -o $result_dir/result.html
它将排除项目的所有包含文件。