如何获取CMake构建预设与配置预设的关联关系?
获取CMake构建预设与配置预设的关联信息
目前CMake命令行没有直接提供过滤构建预设的有效方式(你提到的cmake --build --list-presets --preset=<configure_preset>功能确实未生效,属于已知的功能缺陷),但可以通过以下两种无需自行解析预设文件的方法获取关联信息:
方法1:使用cmake -E evaluate_presets(CMake 3.26+)
CMake 3.26及以上版本新增了evaluate_presets命令,可直接输出包含完整关联关系的结构化预设数据,且会自动处理所有预设文件(包括CMakePresets.json、CMakeUserPresets.json及include引入的文件)。
执行命令:
cmake -E evaluate_presets build
输出的JSON数据中,每个构建预设条目都会包含configurePreset字段,对应其关联的配置预设名称。你可以用jq等工具在脚本中提取所需信息,例如:
cmake -E evaluate_presets build | jq '.[] | {build_preset: .name, configure_preset: .configurePreset}'
方法2:使用--list-presets --json参数(CMake 3.20+)
如果你的CMake版本在3.20到3.25之间,可以通过--list-presets结合--json参数输出构建预设的JSON结构,其中同样包含关联的配置预设信息。
执行命令:
cmake --build --list-presets --json
同样可以用jq提取关联关系:
cmake --build --list-presets --json | jq '.[] | {build_preset: .name, configure_preset: .configurePreset}'
这两种方式都由CMake自身处理预设文件的解析逻辑,无需你手动处理复杂的include引用和多文件合并问题。
内容的提问来源于stack exchange,提问作者JVApen
相关产品推荐
相关产品推荐

