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