如何让Cppcheck为每个扫描源文件生成对应XML并自动命名?
实现Cppcheck单文件独立XML报告生成
方法1:遍历指定目录下的源文件(非递归)
直接用shell循环遍历目标目录下的源文件,为每个文件单独执行Cppcheck命令,自动生成对应名称的XML报告:
# 遍历../drivers/aac目录下的所有.c文件,如需处理.cpp可改为*.{c,cpp} for src_file in ../drivers/aac/*.c; do # 将源文件的.c后缀替换为.xml,生成同目录的XML报告文件 xml_file="${src_file%.c}.xml" # 执行Cppcheck,将当前文件的检查结果输出到对应XML ./cppcheck --enable=all --xml-version=2 -v "$src_file" > "$xml_file" done
方法2:递归遍历所有子目录中的源文件
如果目标目录包含子目录,需要递归处理所有源文件,可结合find命令实现:
# 递归查找../drivers/aac下所有.c文件(包括子目录) find ../drivers/aac -type f -name "*.c" | while read -r src_file; do xml_file="${src_file%.c}.xml" ./cppcheck --enable=all --xml-version=2 -v "$src_file" > "$xml_file" done
关键说明
${src_file%.c}.xml:通过shell参数扩展自动替换文件后缀,无需硬编码文件名,保证XML文件与源文件同名、同目录- 使用
>而非>>:>会创建/覆盖独立的XML文件,而>>是追加内容,不符合单文件独立报告的需求 - 若源文件名包含空格,
find结合read -r的方式可以正确处理;如果用for循环,需先执行IFS=$'\n'避免文件名被空格拆分 - 可根据需求调整Cppcheck参数:比如去掉
-v关闭 verbose 输出,或者将--enable=all改为--enable=warning,performance等更精准的检查项
内容的提问来源于stack exchange,提问作者patricia lomber
相关产品推荐
相关产品推荐

