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