gcovr正则过滤规则失效问题:无法匹配boot_verify*.c格式的覆盖率文件
问题根源
- Windows终端引号处理错误
你当前运行环境为Windows系统,CMD和PowerShell默认不会将单引号识别为参数包裹符号,你写的--filter 'xxx'传入gcovr时,参数值会携带前后的单引号,规则自然无法匹配任何正常路径。 - 正则表达式逻辑错误
你尝试的([a-z][A-Z][0-9]+)这类写法是要求按顺序匹配「1个小写字母+1个大写字母+1个及以上数字」,并不是匹配这三类字符的任意组合,不符合你的文件名规则。
正确配置方法
1. 替换引号格式
- 若使用CMD终端:把规则外层的单引号全部换成双引号,规则无空格时也可以直接省略引号
- 若使用PowerShell终端:除了替换为双引号外,还可以在命令前加
--%停止PowerShell的特殊字符解析,避免转义问题。
2. 编写正确的匹配规则
要匹配所有路径下文件名以boot_verify开头的.c文件,正确的正则规则为:".*/boot_verify[^/]*\.c$"
规则说明:
.*/匹配文件名前的任意层级路径boot_verify匹配文件名前缀[^/]*匹配文件名中前缀之后的任意非路径分隔符字符,避免匹配到其他目录下的同名文件\.c$匹配后缀为.c的文件结尾
3. 完整命令示例(CMD环境)
gcovr -g -k -s --html --html-details -o code_coverage_summary2.html -r . --filter ".*/boot_verify[^/]*\.c$" --filter "firmware/command_processor/bootloader_pic_tb.X/mcc_generated_files/boot/boot_process.c" -v > log4.txt
如果你的文件名存在大小写混合的情况,还可以在正则开头加(?i)开启不区分大小写匹配:--filter "(?i).*/boot_verify[^/]*\.c$"
内容的提问来源于stack exchange,提问作者Ken 99
相关产品推荐
相关产品推荐

