我试图在MyLibConfig.cmake
我的项目文件中正确指定依赖项。在CMakeLists.txt
我有这样的事情:
find_package(aLib REQUIRED)
find_package(bLib)
所以MyLibConfig.cmake
我写了类似的东西:
include(CMakeFindDependencyMacro)
find_dependency(aLib REQUIRED)
find_dependency(bLib)
现在,当我编写另一个需要myLib的项目时,我做了:
find_package(MyLib REQUIRED)
失败是因为MyLib配置文件找不到bLib,但我希望将其视为可选文件。什么是最好的现代CMake实践来解决这个问题?
find_dependency
仅用于(最初)REQUIRED软件包。
find_package
“非必需”子程序包的“复制”到XXXConfig.cmake
脚本时保持不变。
对于CMakeLists.txt
包含
find_package(aLib REQUIRED)
find_package(bLib)
的对应内容为MyLibConfig.cmake
:
include(CMakeFindDependencyMacro)
# for REQUIRED package 'find_package' is replaced with 'find_dependency',
# but 'REQUIRED' keyword is omited.
find_dependency(aLib)
# for non-REQUIRED package 'find_package' remains.
find_package(bLib)
不要将REQUIRED
关键字传递给宏,这一点很重要。所以,一个电话find_dependency
find_package(MyLib) # Without 'REQUIRED'!
并aLib
错过包裹,然后调用(失败)
find_dependency(aLib)
CMake也将MyLib
被视为错过(并打印一条适当的消息),但不会因此而停止配置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句