CMakeFindDependencyMacro¶
- find_dependency¶
find_dependency()
宏封装着find_package()
的调用,用于包裹依赖性find_dependency(<dep> [...])
它被设计为用于 包配置文件 (
<PackageName>Config.cmake
) 中。find_dependency
将正确的参数转发给QUIET
和REQUIRED
,这些参数已传递给原始的find_package()
调用。指定的任何其他参数都会转发给find_package()
。如果找不到依赖项,它将设置一个内容丰富的诊断消息并调用
return()
以结束对调用包配置文件的处理,并返回到加载它的find_package()
命令。
包依赖搜索优化¶
如果 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
调用参数使用了上述启发法。