首页 > 解决方案 > 在配置脚本名称中查找具有指定版本的包

问题描述

我需要使用 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命令自动使用的软件包版本来查找?

标签: c++cmakemongo-c-driver

解决方案


根据find_package文档,该版本嵌入在libmongocxx-config-version.cmake文件中。

这意味着如果您想获取 package libmongoc-1.0-config.cmake,您应该使用:

find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)

推荐阅读