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 版本中被移除。