c++ - 在配置脚本名称中查找具有指定版本的包
问题描述
我需要使用 mangrove(mongo ODM lib over mongo-c-driver 和 mongo-cxx-driver)并将其作为 CMake ExternalProject_Add 命令包含在我的项目中,并依赖于 mongo-c-driver/mongo-cxx-driver
mongocxx 生成 CMake 配置脚本,其名称如下:
libmongocxx-config.cmake
libmongocxx-config-version.cmake
并且使用该脚本通过红树林找到这些没有问题:
set(LIBMONGOCXX_REQUIRED_VERSION 3.1.3)
set(LIBMONGOCXX_REQUIRED_ABI_VERSION v_noabi)
find_package(libmongocxx ${LIBMONGOCXX_REQUIRED_VERSION} REQUIRED)
但是 mongo-c-driver 生成这些脚本的名称包含 ABI 版本到文件名中。
libmongoc-1.0-config.cmake
libmongoc-1.0-config-version.cmake
和类似的 CMake 代码:
set(LIBMONGOC_REQUIRED_VERSION 1.7.0)
set(LIBMONGOC_REQUIRED_ABI_VERSION 1.0)
find_package(LibMongoC ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)
找不到脚本。
当然,如果我从文件名中手动删除版本,它可以找到这些文件,但我想在脚本和 mangove 端解决问题。
所以关于 CMake 技术的问题:
是否有能力指定将由(内部 CMake 脚本名称)find_package
命令自动使用的软件包版本来查找?
解决方案
根据find_package文档,该版本嵌入在libmongocxx-config-version.cmake
文件中。
这意味着如果您想获取 package libmongoc-1.0-config.cmake
,您应该使用:
find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)
推荐阅读
- amazon-web-services - 为什么 SNS 访问控制策略需要指定 Resource 元素 - 它不是隐含的吗?
- swift - RxSwift:CombineLatest 无穷无尽的相同值流
- apache-flink - 作业失败时检查重复的 apache Flink
- python - 当我将视图注入 html 时,为什么查询集是空的?
- authentication - 在 Kubernetes 上使用带有 nginx 入口的客户端证书身份验证时,如何修复 cert-manager 对 Let's Encrypt ACME 挑战的响应?
- apache-spark - 如何在没有数据块的情况下“挂载”数据湖第 1 代
- regex - 从文件名中删除某个字符之后的所有字符
- r - 如何解决 Jags 模型中的尺寸不匹配问题。?
- perl - 使用 perl 将图形添加到 htm 网页
- r - 通过 facet 向 geom_smooth() 提供自定义结值