我正在寻找一种将clang-tidy集成到CI工作流中的方法,但是正在使用的构建系统是MSBuild,它的依赖项由vcpkg在manisfest模式下管理。
是否有一些高级命令行可以通过MSBuild (或其他完全理解MSBuild进程的工具)生成compile_commands.json?
我相信我不是第一个尝试这个的人,我已经看到了几个使用SourceTrail和ClangPowerTools的成功案例,但是在我的例子中,这是特别痛苦的,因为替代方案无法检测vcpkg公开的包含路径。
发布于 2022-01-25 19:43:11
结果表明,自从Visual开始支持linter以来,msbuild就有了clang的内置目标。
要调用它,可以运行:msbuild /t:ClangTidy ...。
不幸的是,很少有命令行选项从clang-整齐集成到msbuild :检查列表、标头筛选器、附加编译器选项、系统标题中的警告标志和工具路径。
如果有人想导出clang生成的修复文件,这就是我的情况,它需要做一些额外的工作。
我实现了我的目标,在项目文件夹中添加了一个Directory.Build.props文件,该文件用批处理脚本(.bat)覆盖到原始clang-tidy.exe的路径,该脚本执行一些准备步骤,并将msbuild命令行转发到一个python,该脚本可以使用其完整的命令行功能调用clang。
道具档案:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ClangTidyToolPath>$(where_I_saved_the_bat_file)\</ClangTidyToolPath>
<ClangTidyToolExe>msbuild-clang-tidy-runner.bat</ClangTidyToolExe>
</PropertyGroup>
</Project>批处理文件:
SET PYTHONPATH=...
REM and maybe other stuff
python3 -m my_custom_clang_tidy_runner %*有趣的是,除了真正的可执行文件之外,批处理文件是我可以放置在Directory.Build.props中不会导致msbuild编译错误的唯一方法。我尝试了python和powershell脚本,但是没有一个被接受为一个合适的clang-井然有序的可执行文件。我尝试创建一个C++程序,该程序与我的Python相同,它也能像预期的那样工作。
因此,总结一下,配方是:
Directory.Build.props文件,以覆盖clang-Directory.Build.props路径。.exe或.bat文件,用于替换clang-msbuild /t:ClangTidy ...和Bob的叔叔!H 217G 218https://stackoverflow.com/questions/70129388
复制相似问题