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 | git clone https://github.com/0xabu/MsBuildCompileCommandsJson.git |
在\bin\Debug\netstandard2.0
目录内可以看到CompileCommandsJson.dll
这个动态库,编译时只需要链接这个动态库,就可以生成compile_command.json
文件。
以spdlog日志库为例,先创建build目录,并调用cmake ..
生成MSBuild编译脚本
1 | mkdir build |
再编译并链接之前编译好的动态库
1 | msbuild -logger:"D:\repository\MsBuildCompileCommandsJson\bin\Debug\netstandard2.0\CompileCommandsJson.dll" .\ALL_BUILD.vcxproj |
此时就能发现当前目录生成了compile_command.json
网上查了一下原理,了解到-logger
参数允许指定一个自定义的日志记录器(logger),它可以在构建过程中记录和处理构建事件,利用这个编译日志记录器可以很好的生成所需要的compile_command.json
文件,这个设计确实很巧妙。
MSBuild生成compile_command.json文件
http://www.airchaoz.top/2024/11/20/MSBuild生成compile-command-json文件/