CMakeFindDependencyMacro

find_dependency

find_dependency() 宏封装了用于包依赖项的 find_package() 调用

find_dependency(<dep> [...])

它被设计用于 包配置文件 (<PackageName>Config.cmake)。find_dependency 转发了传递给原始 find_package() 调用的 QUIETREQUIRED 的正确参数。指定的任何其他参数都将转发到 find_package()

如果找不到依赖项,它会设置一条信息性诊断消息,并调用 return() 以结束调用包配置文件的处理,并返回到加载它的 find_package() 命令。

注意

调用 return() 使得此宏不适合从 Find Modules 中调用。

包依赖项搜索优化

如果在同一目录中,使用与先前调用相同的参数调用 find_dependency,可能是由于菱形包依赖关系,则对 find_package() 的底层调用将被优化掉。此优化对于支持大型包依赖关系图,同时避免重复搜索的组合爆炸非常重要。但是,启发式方法无法解释影响包行为的环境变量,例如某些包提供的 <PackageName>_USE_STATIC_LIBS。因此,包配置文件应避免在调用 find_dependency 之前设置此类变量。

在 3.15 版本中变更: 以前,如果已找到包,则对 find_package() 的底层调用始终被优化掉。CMake 3.15 移除了此优化,以支持 find_dependency 调用参数请求不同组件的情况。

在 3.26 版本中变更: 恢复了 3.15 之前的优化,但采用了上述启发式方法来考虑不同的 find_dependency 调用参数。