CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>¶
3.22 版本新增。
用于将 find_package() 调用变为 REQUIRED 的变量。
项目中每个非 REQUIRED 的 find_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 模块中,也使用类似的模式来先搜索配置包
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,则第一次调用必须成功。这意味着必须找到依赖项的配置包,并且永远不会使用 Find 模块逻辑。