CMakePresets.json配置预设能否同时生效自身与继承的条件?
CMakePresets.json 条件继承失效的解决方法
问题本质
子配置预设添加自身条件时,默认会覆盖父预设的条件,而非自动合并。所以仅添加子条件会导致父条件失效,必须手动将父、子条件组合到allOf数组中。
可行实现方案
假设父预设为linux_base,条件限定hostSystemName为Linux;子预设inherited_preset需要同时满足父条件和环境变量FOO已定义。正确写法是在子预设的condition字段里,用allOf包含父预设的条件和子自身的条件:
{ "version": 3, "configurePresets": [ { "name": "linux_base", "condition": { "equals": "${hostSystemName}", "value": "Linux" }, "generator": "Ninja" }, { "name": "inherited_preset", "inherits": "linux_base", "condition": { "allOf": [ // 显式引入父预设的系统条件 { "equals": "${hostSystemName}", "value": "Linux" }, // 子预设自身的环境变量条件 { "exists": "$ENV{FOO}" } ] }, "cacheVariables": { "BAR": "ON" } } ] }
关键说明
- 继承机制不会自动合并条件,必须显式把父预设的条件加入
allOf,否则子条件会完全覆盖父条件。 - 若需要环境变量
FOO有非空值,可将子条件替换为:{ "notEquals": "$ENV{FOO}", "value": "" }
内容的提问来源于stack exchange,提问作者StoneThrow
相关产品推荐
相关产品推荐

