CMP0127

3.22 版本新增。

cmake_dependent_option() 支持完整的 条件语法

<condition> 参数接受一个 分号分隔的条件列表。CMake 3.21 及更早版本将每个 condition 评估为 if(${condition}),这不能正确处理带有嵌套括号组的条件。CMake 3.22 及更高版本则更倾向于将每个 condition 评估为 if(<condition>),其中 <condition> 像在 if() 调用中那样被重新解析。这允许像

"A AND (B OR C)"

这样的表达式,但需要将像

"FOO MATCHES (UPPER|lower)"

这样的表达式重写为

"FOO MATCHES \"(UPPER|lower)\""

策略 CMP0127 为尚未更新以期望新行为的项目提供兼容性。

此策略是在 CMake 3.22 版本中引入的。可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 会发出警告,并使用 OLD 行为。

注意

策略的 OLD 行为根据定义已被弃用,并可能在未来版本的 CMake 中被移除。