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