如何在 CMake 包配置文件中指定可选依赖项?
How do I specify an optional dependency in a CMake package configuration file?
我正在尝试在我的项目的 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
仅用于(最初)必需的包。
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'!
and aLib
package would be missed, then with (failed) call
find_dependency(aLib)
CMake 也会将 MyLib
视为遗漏(并会打印相应的消息),但不会因此停止配置。
我正在尝试在我的项目的 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
仅用于(最初)必需的包。
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'!
and aLib
package would be missed, then with (failed) call
find_dependency(aLib)
CMake 也会将 MyLib
视为遗漏(并会打印相应的消息),但不会因此停止配置。