首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过命令行从msbuild生成compile_commands.json --没有cmake

通过命令行从msbuild生成compile_commands.json --没有cmake
EN

Stack Overflow用户
提问于 2021-11-26 19:49:01
回答 1查看 486关注 0票数 1

我正在寻找一种将clang-tidy集成到CI工作流中的方法,但是正在使用的构建系统是MSBuild,它的依赖项由vcpkg在manisfest模式下管理。

是否有一些高级命令行可以通过MSBuild (或其他完全理解MSBuild进程的工具)生成compile_commands.json

我相信我不是第一个尝试这个的人,我已经看到了几个使用SourceTrailClangPowerTools的成功案例,但是在我的例子中,这是特别痛苦的,因为替代方案无法检测vcpkg公开的包含路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

道具档案:

代码语言:javascript
复制
<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>

批处理文件:

代码语言:javascript
复制
SET PYTHONPATH=...
REM and maybe other stuff
python3 -m my_custom_clang_tidy_runner  %*

有趣的是,除了真正的可执行文件之外,批处理文件是我可以放置在Directory.Build.props中不会导致msbuild编译错误的唯一方法。我尝试了python和powershell脚本,但是没有一个被接受为一个合适的clang-井然有序的可执行文件。我尝试创建一个C++程序,该程序与我的Python相同,它也能像预期的那样工作。

因此,总结一下,配方是:

  1. 在您想要链接的项目根文件夹中创建Directory.Build.props文件,以覆盖clang-Directory.Build.props路径。
  2. 是一个自定义.exe.bat文件,用于替换clang-
  3. ,它能够转发msbuild传递的命令行选项以及任何您想要的自定义。
  4. 调用msbuild /t:ClangTidy ...和Bob的叔叔!H 217G 218
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70129388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档