前端处理 compile_commands.json 文件并针对它运行各种静态分析工具
项目描述
进程cdb
简单的前端工具,可以通过从 compile_commands.json 读取所需信息来运行各种静态分析工具。
提供输出格式以集成到其他工具,需要时并行化,根据“工具”插件要求覆盖/重新配置编译器标志等。
目前的开发主要在 Windows 上完成,但应该可以在任何有 python 的平台上工作,为你自己的项目和分析器工作开发环境。目前支持的:
- 铿锵有力
- cppcheck
- 蜥蜴
安装
项目在 pypi 中作为源代码分发可用:
pip install processcdb
由于 processcdb 也会安装一些依赖项,因此建议使用pipx进行安装。
一旦安装包。生成配置文件:
processcdb --dump-config
这将在默认位置生成准系统配置文件(稍后可以使用 --config 参数覆盖)。编辑此文件以指向这些分析器的“二进制”选项以指向其可执行文件。在 Windows 上,不要省略文件扩展名。
用法
基本帮助:
processcdb --help
在生成 compile_commands.json 的过程之后,您可以使用所选工具运行 processcdb,如下所示:
processcdb --tool clang-tidy
这将尝试从当前工作目录中找到 json 文件并运行该工具,在本例中为 clang-tidy,针对所有已编译且未在 processcdb 配置文件或工具自己的配置文件中列入黑名单的文件,并生成输出到标准输出. 如果您在无权更改当前工作目录时需要运行该工具,您可以传递--cdb和绝对位置:
processcdb --tool clang-tidy --cdb D:\src\myproject\build\compile_commands.json
可以将工具输出定向到带有--output参数的文件。值得注意的是,某些工具 ( -t) 可以为后期处理或工具特定目的提供进一步的论据:
processcdb --tool clang-tidy --cdb ~/src/myproject/build/compile_commands.json --output scan.log --xml
如果在没有传递--config参数的情况下调用 processcdb,则使用默认配置文件。位置取决于操作系统。如果您需要使用不同类型的设置分析多个项目,或者您想使用特定扫描仪的不同版本进行分析,请使用多个配置文件。
例如,如果您有一个希望使用 clang 11.0.0 扫描的代码库,但您的项目实际上是使用 Microsoft 的 msvc 编译的,并且您有另一个使用 clang 编译的项目:为 msvc 和 clang 创建单独的配置文件并调用 processcdb:
processcdb --tool clang-tidy --config location/to/config/msvc17_clang_interop.ini
配置
如果在没有传递--config参数的情况下调用 processcdb,则使用默认配置文件。要生成配置文件,请传递--dump-config给 processcdb。将默认配置文件保存到文件中。捕获标准输出或提供--config参数。
配置文件
每个工具都有一个单独的部分,每个部分都可以在工具特定部分或默认配置中进行配置。最小。单个工具配置看起来像这样:
[clang-tidy]
binary=C:\llvm-11.0.0\bin\clang-tidy.exe
这里我们有 clang-tidy 工具的部分,我们将变量设置binary为
c:\llvm-11.0.0\bin\clang-tidy.exe.
Pythonconfigparser模块用于加载/解析文件。
以下变量在工具之间共享:
binary- 扫描仪的绝对路径。file_blacklist- 应从扫描中省略的文件规范列表arg_blacklist- 传递给编译器但不应传递给工具的命令行参数列表。arg_additions- 键/值对列表。如果在 json 中找到 key,则将一个值放入工具的参数中。jobs- 默认数量进程 processcdb 或工具可以用来处理。0 为自动检测。default_includes- 应该作为包含路径自动传递给工具的路径列表,这些路径可能未在 compile_commands.json 中指定default_args- compile_commands.json 未提供的应传递给工具的参数列表includes_as_system:应该从正常的 -I 包含转换为 -isystem 包含的文件规范列表。
每个配置选项是一个列表并允许多个值,使用分号作为项目分隔符。
使用arg_blacklist,可以去除不必要的命令行参数,arg_addition并可用于注入新参数。例如,如果在 msvc 中编译项目并启用了异常,则以下配置将允许 clang-tidy 工具仍然正常工作:
[clang-tidy]
binary=C:\llvm-11.0.0\bin\clang-tidy.exe
arg_blacklist=EHsc
arg_additions=EHsc=-Xclang,-fcxx-exceptions
首先,processcdb 会注意到 compile_commands.json 可能有/EHsc参数,它会添加 2 个新参数
-Xclang和“-fcxx-exceptions”,然后 arg_blacklist 会删除原来的/EHsc
cppcheck 工具还有一个选项supression_file,如果需要,它应该是 cppchecks 自己的抑制文件的绝对位置。
学分
clang-tidy 工具将日志文件转换为 xml 以直接支持 jenkins 的能力是CodeChecker项目的一部分,它在 Apache 2.0 下获得许可
链接
主页:https ://github.com/rasjani/processcdb 问题:https ://github.com/rasjani/processcdb/issues