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

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

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