在配置脚本名称中带有指定版本的find_package

时间:2018-12-29 16:46:52

标签: c++ cmake mongo-c-driver

我需要使用mangrove(位于mongo-c-driver和mongo-cxx-driver上的mongo ODM库)并将其作为CMake ExternalProject_Add命令包含在我的项目中,并且依赖于mongo-c-driver / mongo-cxx-驱动程序

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)

找不到脚本。

当然,如果我手动从文件名中删除该版本,它可以找到那些文件,但是我想在脚本和芒果方面解决该问题。

关于CMake技术的问题:

是否可以指定(在CMake脚本名称中)find_package命令自动使用的软件包版本?

1 个答案:

答案 0 :(得分:2)

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

这意味着,如果要获取软件包libmongoc-1.0-config.cmake,则应使用:

find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)