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 开始将它们设置为普通变量,但前提是它们已设置为普通变量。 这是为了在策略 CMP0169
的 NEW 行为下,保留对某些 FetchContent
用例的支持,同时还保留调用具有相同项目名称的 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 版本中移除。