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。NEW 行为会在 FETCHCONTENT_FULLY_DISCONNECTED 设置为 true 且依赖项填充将被跳过,但该依赖项的源目录不存在时,引发致命错误。

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

注意

策略的 OLD 行为根据 cmake-policies(7) 定义已弃用,并可能在 CMake 的未来版本中移除。