cmake 如何为项目中的所有模块获取一个单一的cppcheck /clang-tiy结果报告文件?

qgzx9mmu  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(172)

在我的项目中,我有多个模块,我想将cppcheck或clang-tidy与cmake集成。问题是,在cmake中集成上述工具并执行静态分析的情况下,我只得到最后检查的模块的报告。是否有可能从项目中的所有模块获得一个报告?我尝试了许多不同的配置,但没有一个工作。
下面是cpp与cmake集成的例子:

find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if (CMAKE_CXX_CPPCHECK)
list(
APPEND CMAKE_CXX_CPPCHECK
"--enable=warning"
"--inconclusive"
"--force"
"--inline-suppr"
"--suppressions-list=${CMAKE_SOURCE_DIR}/CppCheckSuppressions.txt"
"--xml"
"--output-file=${CMAKE_SOURCE_DIR}/cppcheck-results.xml"
)
h43kikqp

h43kikqp1#

是否有可能从项目中获得所有模块的一个报告?我尝试了许多不同的配置,但没有一个工作。
我想在写这篇文章的时候,答案是否定的。
在CMake论述网站上有相关讨论:parallel cppcheck invocation corrupts common output file,它链接到Kitware的GitLab上的这个特性请求:Support file specifc properties for CMAKE__CPPCHECK #22020,它依赖于Introduce SOURCE_FILE_PROPERTY generator expression that operates on properties of source files #21986,这(如果我理解正确的话)似乎意味着获得所需内容的下一步并不完全是所需内容,而是为每个要编译的源文件获得一个cppechck输出文件(基于像LOCATION这样的源文件属性)。
注意:CMake运行每个源文件的分析工具,而不是通过成批的源文件调用它们,我认为这是一件好事,因为它利用生成的构建系统来避免对不需要重新构建的文件重新运行分析。如果您查看CMake为各种构建系统(例如,cmMakefileTargetGenerator::WriteObjectRuleFilescmNinjaTargetGenerator::WriteCompileRule)生成的源代码,您可以自己确认这一点。
使用add_custom_command的构建事件签名编写一个自定义命令并不困难,可以在构建目标结束时将所有输出文件连接到一个文件中,您可以使用内置的cmake -E cat命令行命令,或者编写并运行一个CMake脚本,该脚本获取公共输出目录下的文件列表,读取它们,连接它们,并将输出写入一个文件。

相关问题