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 模块甚至使用类似的模式来首先搜索 config 包
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 包,而 Find 模块逻辑永远不会被使用。