CMP0127

在 3.22 版本中添加。

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

<depends> 参数接受 分号分隔的条件列表。 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 版本中删除。