CMake生成器表达式中$<CONFIG:Debug>判定逻辑咨询
$<$<CONFIG:Debug>:DEBUG_MODE> 生成器表达式运行逻辑 该表达式是嵌套结构的CMake生成器表达式,执行时会从内到外逐层计算,完整逻辑如下:
1. 内层条件判断逻辑
内层的$<CONFIG:Debug>是布尔类型生成器表达式,作用是精确匹配当前构建配置名:
- 若当前构建配置为
Debug,返回布尔值1 - 若当前为
Release、RelWithDebInfo、MinSizeRel等其他任意配置,返回布尔值0
注意:该表达式不是判断
$<CONFIG>是否非空,而是对配置名字符串做全等匹配,这也是之前误解的核心点——哪怕Release配置下$<CONFIG>有值,只要和Debug不相等,内层条件就会返回0
2. 外层条件展开逻辑
外层是$<condition:true_string>格式的单分支条件生成器表达式,规则为:
- 当传入的
condition为1时,返回后面的true_string内容 - 当传入的
condition为0时,返回空字符串
3. 完整执行结果
结合两层逻辑,该表达式的最终展开结果为:
- Debug配置下:内层返回
1,表达式最终展开为DEBUG_MODE - 其他配置(含Release)下:内层返回
0,表达式最终展开为空字符串
如果使用CMake 3.8及以上版本支持的$<IF>写法,该表达式等价于$<IF:$<CONFIG:Debug>,DEBUG_MODE,>,二者逻辑完全一致。
内容的提问来源于stack exchange,提问作者Aminos
相关产品推荐
相关产品推荐

