CMakeFindDependencyMacro¶
- find_dependency¶
find_dependency()
宏封装了用于包依赖项的find_package()
调用find_dependency(<dep> [...])
它被设计用于 包配置文件 (
<PackageName>Config.cmake
)。find_dependency
转发了传递给原始find_package()
调用的QUIET
和REQUIRED
的正确参数。指定的任何其他参数都将转发到find_package()
。如果找不到依赖项,它会设置一条信息性诊断消息,并调用
return()
以结束调用包配置文件的处理,并返回到加载它的find_package()
命令。注意
调用
return()
使得此宏不适合从 Find Modules 中调用。
包依赖项搜索优化¶
如果在同一目录中,使用与先前调用相同的参数调用 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
调用参数。