CMakeFindDependencyMacro

find_dependency

find_dependency() 宏封装着 find_package() 的调用,用于包裹依赖性

find_dependency(<dep> [...])

它被设计为用于 包配置文件 (<PackageName>Config.cmake) 中。 find_dependency 将正确的参数转发给 QUIETREQUIRED,这些参数已传递给原始的 find_package() 调用。指定的任何其他参数都会转发给 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 调用参数使用了上述启发法。