CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>

在 3.22 版本中添加。

用于使 find_package() 调用变为 REQUIRED 的变量。

项目中每个非 REQUIREDfind_package() 调用都可以通过将变量 CMAKE_REQUIRE_FIND_PACKAGE_<PackageName> 设置为 TRUE 来变为 REQUIRED。 这可以用于断言关于构建环境的假设,并确保在这些假设不成立时构建会尽早失败。

请注意,将此变量设置为 true 会破坏一些常用的模式。 有时使用对 find_package() 的多次调用,以获得与默认值不同的搜索顺序。 例如,项目可以强制首先检查特定软件包的已知路径,然后再搜索任何其他默认搜索路径

find_package(something PATHS /some/local/path NO_DEFAULT_PATH)
find_package(something)

在上面,第一次调用在特定目录中查找 something 软件包。 如果 CMAKE_REQUIRE_FIND_PACKAGE_something 设置为 true,则第一次调用必须成功,否则会发生致命错误。 第二次调用永远没有机会提供回退到使用默认搜索位置。

即使 CMake 自己的某些 Find 模块也使用类似的模式来首先搜索 config package

find_package(something CONFIG QUIET)
if(NOT something_FOUND)
  # Fall back to searching using typical Find module logic...
endif()

同样,如果 CMAKE_REQUIRE_FIND_PACKAGE_something 为 true,则第一次调用必须成功。 这实际上意味着必须为依赖项找到一个 config package,并且永远不会使用 Find 模块逻辑。

另请参阅 CMAKE_DISABLE_FIND_PACKAGE_<PackageName> 变量。