我正在使用 gcov 和 gcovr 来生成我的代码测试覆盖率(测试是使用 google test++ 完成的)。 因此,我使用 -ftest-coverage -fprofile-arcs 选项进行编译,然后运行 gcovr(它本身运行 gcov)。 但是,在我的输出中,我有 cpp 文件,覆盖率为 100%,还有 .h 文件,即使它们没有可执行代码,因此它们的覆盖率输出为 0%。
这个 0% 没有任何意义,因此,我想从覆盖率输出中删除 .h 文件。我找不到关于那个的任何信息......
我已经尝试将 : -e "*.h"添加到 govr 选项,以排除扩展名为 .h 的文件,但它不起作用(它实际上排除了所有内容......)。
有人有想法吗??
谢谢!!
最佳答案
我也曾为此苦苦挣扎,现在找到了正确的解决方案。这里有一个例子和工作方式:
运行 gcov 时,使用选项 -o coverage.xml
,然后打开文件。找到要排除的文件名并复制文件名。
在浏览器中打开以下链接并将整个文件名复制到显示以下内容的部分:TEST STRING
https://regex101.com/
现在,它说:REGULAR EXPRESSION,创建一个正则表达式,使整个文件名BLUE。确保此表达式不适用于需要在覆盖率报告中显示的其他文件。
这里有一些基本规则:通常,对于“某些字符”,您可以使用 ".*"
什么跟*.cpp类型的文件无关,你要看的是cpp文件!所以如果你想排除像 "<some characters>include<more characters>"
这样的东西, 那么你可以使用 ".*include.*"
.这也将排除一些文件名,如 include.cpp
因为 .
在正则表达式中有意义,使用\.
所以如果你想排除 "<something>.h"
文件,使用 ".*\.h"
对我有用的示例:(排除包含文件和测试框架和 linux 包含目录并排除 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
玩得开心!
关于c++ - 如何忽略 gcov 输出中的头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025367/