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

find_package with specified version in configuration script name

本文关键字:版本 find package 脚本 配置      更新时间:2023-10-16

我需要使用mangrove(mongo-c-driver和mongo-cxx驱动程序之上的mongo-ODM lib),并将其作为CMake-ExternalProject_Add命令包含在我的项目中,并依赖于mongo-c-deriver/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配置.cmake

libmongoc-1.0配置版本.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命令将自动使用的包的版本?

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

这意味着,如果你想获得包libmongoc-1.0-config.cmake,你应该使用:

find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)