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() 调用的 `QUIET` 和 `REQUIRED` 参数转发过去。任何指定的附加参数也会被转发给 find_package()

如果依赖项未找到,它会设置一个包含诊断信息的通知消息,并调用 return() 来结束对正在调用的包配置文件(package configuration file)的处理,并返回到加载它的 find_package() 命令。

注意

调用 return() 使得此宏不适合从 查找模块 调用。

包依赖项搜索优化

如果 `find_dependency` 在同一目录中以与先前调用相同的参数调用,这可能是由于包依赖项的菱形结构(diamond-shaped package dependencies),则会优化掉底层的 find_package() 调用。此优化对于支持大型包依赖关系图同时避免重复搜索的组合爆炸至关重要。但是,此启发式方法无法考虑影响包行为的环境变量,例如某些包提供的 `_USE_STATIC_LIBS`。因此,包配置文件应避免在调用 `find_dependency` 之前设置此类变量。

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

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