CMP0170

在 3.30 版本中已添加。

FETCHCONTENT_FULLY_DISCONNECTED 设置为 true 时,FetchContent_MakeAvailable()FetchContent_Populate() 强制执行约束,即它们的源目录必须已经填充。该要求一向在文档中明确规定,但未经 CMake 3.29 或更低版本的检查或强制执行。当项目预期某个依赖项已填充但其填充被静默跳过时,这有时会导致难以追踪的错误。

CMake 3.30 及以上版本更偏向于检查和强制执行约束。此策略可用于在用户无法轻松防止 FETCHCONTENT_FULLY_DISCONNECTED 被不恰当设置成 true 的情况下兼容。

此策略的 OLD 行为准许 FETCHCONTENT_FULLY_DISCONNECTED 被设置成 true,即使某个依赖项的源目录尚未填充。如果 FETCHCONTENT_FULLY_DISCONNECTED 被设置成 true 并将跳过依赖项填充,但所述依赖项的源目录不存在,则 NEW 行为会停止并出现致命错误。

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

注意

政策的 OLD 行为 默认情况下已弃用,并可能在将来的 CMake 版本中被移除。