CMP0169

添加于版本 3.30。

调用 FetchContent_Populate() 时使用单个参数(已声明的依赖项的名称)已被弃用。

在引入 FetchContent_MakeAvailable() 之前,项目之前填充了已声明的内容(使用 FetchContent_Declare() 声明),使用以下模式

FetchContent_GetProperties(depname)
if(NOT depname_POPULATED)
  FetchContent_Populate(depname)
  add_subdirectory(${depname_SOURCE_DIR} ${depname_BINARY_DIR})
endif()

以上模式不支持随时间推移添加到 FetchContent 的许多功能。它忽略了诸如 SYSTEMEXCLUDE_FROM_ALL 之类的选项,这些选项可以提供给 FetchContent_Declare(),但无法告知上述项目代码。它也不支持 依赖提供程序。项目应调用 FetchContent_MakeAvailable() 而不是使用上述模式。

CMake 3.30 及更高版本倾向于拒绝调用 FetchContent_Populate() 并使用已声明的依赖项的名称。此策略为尚未更新为调用 FetchContent_MakeAvailable() 的项目提供兼容性。

此策略的 OLD 行为允许使用已声明的依赖项的名称调用 FetchContent_Populate()NEW 行为在这种情况下会因致命错误而停止。

注意

使用完整的填充详细信息作为命令参数而不是仅作为依赖项名称调用 FetchContent_Populate() 仍然完全受支持。只有使用单个参数(先前声明的依赖项的名称)调用 FetchContent_Populate() 的形式才在此策略中被弃用。

此策略在 CMake 3.30 版本中引入。它可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 会发出警告,并使用 OLD 行为。

注意

策略的 OLD 行为按定义已被 弃用,并可能在未来的 CMake 版本中移除。