CMP0077¶
在 3.13 版本中添加。
option()
尊重普通变量。
option()
命令通常用于创建缓存条目,以允许用户设置选项。然而,在某些情况下,项目可能会在调用 option()
命令之前定义一个与该选项同名的普通(非缓存)变量。例如,一个将另一个项目作为子目录嵌入的项目可能想要硬编码子项目的选项,以使其按照其需要的方式构建。
由于历史原因,在 CMake 3.12 及更低版本中,当满足以下条件时,option()
命令会移除同名的普通(非缓存)变量:
指定名称的缓存条目根本不存在,或者
指定名称的缓存条目存在,但尚未被赋予类型(例如,通过命令行上的
-D<name>=ON
)。
在这两种情况下(通常在新的构建树中的首次运行时),option()
命令会为缓存条目赋予 BOOL
类型,并移除任何同名的普通(非缓存)变量。在剩余的情况下,如果指定名称的缓存条目已经存在并且具有类型(通常在构建树的后续运行时),option()
命令不会更改任何内容,并且任何同名的普通变量都将保持设置状态。
在 CMake 3.13 及更高版本中,当给定名称的普通变量已经存在时,option()
命令倾向于不执行任何操作。它不会创建或更新缓存条目,也不会移除普通变量。新行为在构建树的首次运行和后续运行之间保持一致。此策略提供了与尚未更新以预期新行为的项目的兼容性。
当 option()
命令看到给定名称的普通变量时
此策略的
OLD
行为是即使在存在同名普通变量的情况下也继续执行。如果缓存条目尚不存在且没有类型,则会创建缓存条目和/或赋予类型,并移除普通变量。此策略的
NEW
行为是在存在同名普通变量时,不执行任何操作。普通变量不会被移除。缓存条目不会被创建或更新,如果存在则会被忽略。
有关 CMP0126
的类似策略,请参阅 set(CACHE)
命令,但请注意,这两个策略之间的 NEW
行为存在一些差异。
此策略在 CMake 3.13 版本中引入。可以通过 cmake_policy()
或 cmake_minimum_required()
进行设置。如果未设置,CMake 会发出警告,并使用 OLD
行为。
使用 CMAKE_POLICY_DEFAULT_CMP0077
变量来为子目录中的第三方项目设置策略,而无需修改它。
注意
策略的 OLD
行为按照定义已弃用
,并且可能会在 CMake 的未来版本中移除。