CMP0183¶
4.0 版本新增。
add_feature_info() 支持完整的 条件语法。
<enabled> 参数接受一个以 分号分隔的列表 的条件。CMake 3.31 及更低版本将每个 condition 评估为 if(${condition}),这不能正确处理带有嵌套括号组的条件。CMake 4.0 及更高版本则倾向于将每个 condition 评估为 if(<condition>),其中 <condition> 就像在调用 if() 中字面写入一样被重新解析。这允许诸如
"A AND (B OR C)"
但要求诸如
"FOO MATCHES (UPPER|lower)"
重写为
"FOO MATCHES \"(UPPER|lower)\""
策略 CMP0183 为尚未更新以预期新行为的项目提供兼容性。
此策略在 CMake 4.0 版本中引入。它可以通过 cmake_policy() 或 cmake_minimum_required() 设置。如果未设置,CMake 会发出警告并使用 OLD 行为。
注意
策略的 OLD 行为根据定义已弃用,并可能在未来版本的 CMake 中删除。