MSBuild生成compile_command.json文件

在windows平台上,CMake生成compile_command.json不是一件容易的事情,CMAKE_EXPORT_COMPILE_COMMANDS可能不会生效,同时也没有bear一样的生成工具。

最近发现谷歌程序员开发的工具 https://github.com/0xabu/MsBuildCompileCommandsJson

可以很方便的为CMake和MSBuild编译的项目生成compile_command.json

该项目没有提供Release,需要自己手动编译一下。首先安装dotnet环境:https://dotnet.microsoft.com/en-us/download/dotnet

再将项目克隆到本地进行编译

1
2
3
4
git clone https://github.com/0xabu/MsBuildCompileCommandsJson.git

cd MsBuildCompileCommandsJson
dotnet build

\bin\Debug\netstandard2.0目录内可以看到CompileCommandsJson.dll这个动态库,编译时只需要链接这个动态库,就可以生成compile_command.json文件。

以spdlog日志库为例,先创建build目录,并调用cmake .. 生成MSBuild编译脚本

1
2
3
mkdir build
cd build
cmake ..

再编译并链接之前编译好的动态库

1
msbuild -logger:"D:\repository\MsBuildCompileCommandsJson\bin\Debug\netstandard2.0\CompileCommandsJson.dll" .\ALL_BUILD.vcxproj

此时就能发现当前目录生成了compile_command.json

网上查了一下原理,了解到-logger 参数允许指定一个自定义的日志记录器(logger),它可以在构建过程中记录和处理构建事件,利用这个编译日志记录器可以很好的生成所需要的compile_command.json文件,这个设计确实很巧妙。

作者

echo

发布于

2024-11-20

更新于

2024-11-20

许可协议

评论