使用CMake与Visual Studio 17 2022生成器如何导出编译命令?
针对Visual Studio 17 2022生成器导出编译命令的替代方法及CMake缓存说明
替代导出方法
1. 利用CMake文件API(cmake-file-api)
这是CMake官方提供的灵活替代方案,无需依赖生成器对CMAKE_EXPORT_COMPILE_COMMANDS的支持:
- 在你的CMake构建目录下,手动创建路径
.cmake/api/v1/query/client-myclient(myclient可替换为任意自定义名称) - 在该路径下创建一个空文件,命名为
compile_commands - 重新运行CMake配置或构建命令(比如
cmake --build .),完成后编译命令会生成在.cmake/api/v1/reply目录下的compile_commands.json文件中
2. 使用第三方工具生成
compdb:专门适配Visual Studio项目的编译命令生成工具,安装后在项目根目录执行:
compdb -p <你的构建目录路径> vs工具会自动解析构建目录下的
.vcxproj文件,生成标准的compile_commands.json。手动解析MSBuild日志:如果不想依赖第三方工具,可通过MSBuild生成详细日志后提取命令:
- 执行构建时添加日志参数:
msbuild /t:Rebuild /fl /flp:LogFile=build.log;Verbosity=diagnostic - 编写脚本解析
build.log中以CL.exe开头的编译行,转换成compile_commands.json格式。这种方式需要自行处理路径和参数映射,适合临时场景。
- 执行构建时添加日志参数:
CMake缓存中能否找到编译命令?
CMake缓存文件(CMakeCache.txt)不存储完整的编译命令,它仅保存CMake配置阶段的参数、路径、变量值等元数据。具体的编译命令是生成Visual Studio项目文件后,由MSBuild构建系统负责生成和执行的,因此无法从CMake缓存中获取。
内容的提问来源于stack exchange,提问作者Irbis
相关产品推荐
相关产品推荐

