LibMongoCxx 的正确 CMake 配置

问题描述 投票:0回答:1

我正在使用 MongoDB C++ 库 3.5.0 开发一个项目,但我无法弄清楚如何使用 CMake 正确包含 mongocxx。

现在 mongocxx 已包含在 CMake 中,如下所示:

find_package(libmongocxx REQUIRED)
include_directories(${LIBMONGOCXX_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${LIBMONGOCXX_LIBRARIES})

这对于构建我的最小示例效果很好:

// main.cpp:
#include <mongocxx/instance.hpp>

int main()
{
    mongocxx::instance instance{};
}

但是,当运行 CMake 时,我收到以下警告:

CMake Warning at /usr/lib64/cmake/libmongocxx-3.5.0/libmongocxx-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::mongocxx_shared' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  CMakeLists.txt:16 (find_package)

我想摆脱这个以整理我的 CMake 输出,而且还因为当前的方式已被弃用。

当我使用警告

find_package(mongo::mongocxx_shared REQUIRED)
find_package(mongocxx_shared REQUIRED)
中的建议时,我收到一条错误消息,指出
Could not find a package configuration file provided by "mongocxx_shared"
。看看可用的内容,我发现:

[georg@archlinux build]$ locate mongo | grep cxx | grep .cmake
/usr/include/mongocxx/v_noabi/mongocxx/cmake
/usr/lib/cmake/libmongocxx-3.5.0
/usr/lib/cmake/mongocxx-3.5.0
/usr/lib/cmake/libmongocxx-3.5.0/libmongocxx-config-version.cmake
/usr/lib/cmake/libmongocxx-3.5.0/libmongocxx-config.cmake
/usr/lib/cmake/mongocxx-3.5.0/mongocxx-config-version.cmake
/usr/lib/cmake/mongocxx-3.5.0/mongocxx-config.cmake
/usr/lib/cmake/mongocxx-3.5.0/mongocxx_targets-release.cmake
/usr/lib/cmake/mongocxx-3.5.0/mongocxx_targets.cmake

mongocxx-config.cmake
存在,因此我尝试了
find_package(mongocxx REQUIRED)
,这使得CMake不再抱怨,但是现在变量
${LIBMONGOCXX_INCLUDE_DIRS}
${LIBMONGOCXX_LIBRARIES}
保持为空,因此编译器无法找到包含内容。

包含此库而不遇到弃用警告的正确方法是什么?

这里作为参考的是我目前正在使用的完整 CMake 文件:

cmake_minimum_required(VERSION 3.14)

project(
    test
    VERSION 0.1.0
)

add_executable(${PROJECT_NAME}
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
)

find_package(libmongocxx REQUIRED)
find_package(mongocxx REQUIRED)

include_directories(${LIBMONGOCXX_INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} ${LIBMONGOCXX_LIBRARIES})
c++ mongodb cmake mongo-cxx-driver
1个回答
0
投票

这就是我解决这个问题的方法。当 find_package() 找不到 libmongocxx 包时,可以使用 pkg-config 工具来查找包,而不是使用绝对路径:

find_package(PkgConfig REQUIRED)
pkg_search_module(LIBMONGOCXX REQUIRED libmongocxx)

然后您可以像这样引用包含文件:

include_directories(
    ${LIBMONGOCXX_INCLUDE_DIRS}
)
© www.soinside.com 2019 - 2024. All rights reserved.