CMakeFindDependencyMacro

find_dependency

find_dependency() 宏包装了一个 find_package() 对包依赖的调用:

find_dependency(<dep> [...])

它旨在用于 Package Configuration File (<PackageName>Config.cmake)。 find_dependency 转发传递给原始 find_package() 调用的 QUIETREQUIRED 的正确参数。指定的任何其他参数都将转发给 find_package()

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

备注

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

包依赖搜索优化

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