如何忽略 gcov 输出中的头文件?

pip*_*pip 3 c++ continuous-integration code-coverage gcov gcovr

我正在使用 gcov 和 gcovr 来生成我的代码测试覆盖率(测试是用 google test++ 完成的)。因此,我使用 -ftest-coverage -fprofile-arcs 选项进行编译,然后运行 ​​gcovr(它本身运行 gcov)。但是,在我的输出中,我有 cpp 文件,覆盖率为 100%,还有 .h 文件,即使它们没有可执行代码,因此它们的覆盖率为 0%。

这个 0% 没有任何意义,因此,我想从覆盖率输出中删除 .h 文件。我找不到任何关于它的东西...

我已经尝试添加: -e "*.h" 到 govr 选项,以排除扩展名为 .h 的文件,但它不起作用(它实际上排除了所有内容......)。

有人有想法吗?

谢谢 !!

Bar*_*ort 5

我也在为此苦苦挣扎,现在找到了正确的解决方案。这是一个示例和工作方式:

运行 gcov 时,使用 option -o coverage.xml,然后打开文件。找到要排除的文件名并复制文件名。

在浏览器中打开以下链接并将整个文件名复制到显示以下内容的部分:TEST STRING

https://regex101.com/
Run Code Online (Sandbox Code Playgroud)

现在,它说: 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
Run Code Online (Sandbox Code Playgroud)

玩得开心!