CMP0180¶
在 3.31 版本中添加。
project()
通常将 <PROJECT-NAME>_*
设置为普通变量。
在 CMake 3.29 及更低版本中,project()
命令将 <PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和 <PROJECT-NAME>_IS_TOP_LEVEL
设置为缓存条目,但不是作为普通变量。CMake 3.30 开始将它们设置为正常变量,但仅当它们已设置为正常变量时。这样做是为了保留对某些 FetchContent
使用案例的支持,这些案例在 CMP0169
的新行为下,同时还可以保留调用 project()
且项目名称相同嵌套目录的行为。有关详细信息,请参阅版本 3.30.3、3.30.4 和 3.30.5 的发行说明。
CMake 3.31 及更高版本通常喜欢始终设置 <PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和 <PROJECT-NAME>_IS_TOP_LEVEL
,无论已经存在什么缓存或普通变量,都将它们设置为缓存条目和普通变量。此策略为尚未更新为预期此行为的项目提供兼容性。
此策略的 OLD
行为仅当 project()
已被调用时,已经有一个名为 <PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和 <PROJECT-NAME>_IS_TOP_LEVEL
的常规变量时,才会为此策略设置常规变量。此策略的 NEW
行为在 project()
被调用后,始终会为此策略设置 <PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和 <PROJECT-NAME>_IS_TOP_LEVEL
的常规变量。
此策略在 CMake 版本 3.31 中首次引入。它可以由 cmake_policy()
或 cmake_minimum_required()
进行设置。如果未设置,CMake 不 会发出警告,并使用 OLD
行为。
说明
根据 定义
,策略的 OLD
行为已经 弃用
,可能在未来的 CMake 版本中被删除。