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