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