CMakeFindDependencyMacro

此模块提供了一个以宏形式实现的命令,用于查找包的依赖项。

在 CMake 包配置文件中加载此模块,使用:

FooConfig.cmakefoo-config.cmake
include(CMakeFindDependencyMacro)

注意

此模块旨在用于 包配置文件<PackageName>Config.cmake)。

命令

此模块提供以下命令

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 调用参数。