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