在cmake c ++项目中使用mongodb cxx驱动程序

时间:2016-05-13 12:59:21

标签: c++ mongodb c++11 cmake mongodb-c

我是cmake的新手,我想使用c ++和最新的mongodb cxx驱动程序连接到mongodb。我设法编译并安装驱动程序,但现在我坚持在我的cmake项目中使用它。

我使用默认设置安装了mongodb驱动程序,因此它位于/ usr / local / lib / include / mongocxx / v_noabi / mongocxx下。

在我的cmake文件中,我想通过以下方式解决包含问题:

include_directories(/ usr / local / lib / include / mongocxx / v_noabi / usr / local / lib / include / bsoncxx / v_noabi)

但我不知道如何将驱动程序库实际链接到我的可执行文件。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:9)

我已经完成了将所有链接在mongocxx驱动程序文档上并使用CMake'find_package'的链接:

find_package(libmongocxx REQUIRED)
find_package(libbsoncxx REQUIRED)
include_directories(${LIBMONGOCXX_INCLUDE_DIR})
include_directories(${LIBBSONCXX_INCLUDE_DIR})
include_directories("/usr/local/include/mongocxx/v_noabi")
include_directories("/usr/local/include/bsoncxx/v_noabi")
include_directories("/usr/local/include/libmongoc-1.0")
include_directories("/usr/local/include/libbson-1.0")
include_directories("/usr/local/lib")

add_executable(YOUR_PROJECT ${SOURCE_FILES})

target_link_libraries(YOUR_PROJECT ${LIBMONGOCXX_LIBRARIES})
target_link_libraries(YOUR_PROJECT ${LIBBSONCXX_LIBRARIES})

答案 1 :(得分:3)

你不应该这样做。您可以而且应该通过CMake的find_packagepkg_check_modules子系统找到C ++ 11驱动程序。 C ++ 11驱动程序支持两者。

答案 2 :(得分:0)

这项工作对我来说:

cmake_minimum_required(VERSION 3.10)
project(cmongodb)

set(CMAKE_CXX_STANDARD 14)

find_package(libbsoncxx-static REQUIRED)
find_package(libmongocxx-static REQUIRED)

include_directories(${LIBMONGOCXX_STATIC_LIBRARIES})
include_directories(${LIBBSONCXX_STATIC_LIBRARIES})
include_directories(${LIBMONGOCXX_STATIC_INCLUDE_DIRS})
include_directories(${LIBBSONCXX_STATIC_INCLUDE_DIRS})

message(STATUS "${LIBMONGOCXX_STATIC_LIBRARIES}")
message(STATUS "${LIBMONGOCXX_STATIC_INCLUDE_DIRS}")

message(STATUS "${LIBBSONCXX_STATIC_LIBRARIES}")
message(STATUS "${LIBBSONCXX_STATIC_INCLUDE_DIRS}")

add_executable(cmongodb main.cpp mymongo.cpp mymongo.h)

target_link_libraries(cmongodb ${LIBMONGOCXX_STATIC_LIBRARIES} ${LIBBSONCXX_STATIC_LIBRARIES})

这里我在前缀static中安装了mongo db。通常,你会全力以赴

static_STATIC

答案 3 :(得分:0)

在macOS Mojave的CLion中设置MongoDB C ++驱动程序的步骤:

  1. brew install mongo-cxx-driver(如果遇到任何错误,提示缺少某些东西,则将其冲煮安装)

  2. 打开CLion并为MongoDB文档提供的hello world代码创建文件:

    #include <iostream>

    #include <bsoncxx/builder/stream/document.hpp>
    #include <bsoncxx/json.hpp>

    #include <mongocxx/client.hpp>
    #include <mongocxx/instance.hpp>

    int main(int, char**) {
        mongocxx::instance inst{};
        mongocxx::client conn{mongocxx::uri{}};

        bsoncxx::builder::stream::document document{};

        auto collection = conn["testdb"]["testcollection"];
        document << "hello" << "world";

        collection.insert_one(document.view());
        auto cursor = collection.find({});

        for (auto&& doc : cursor) {
            std::cout << bsoncxx::to_json(doc) << std::endl;
        }
    }
  1. 通过将CMakeLists.txt设置为以下内容,CLion可以在哪里找到驱动程序文件:
# replace PROJECT_NAME by the name of your clion project

cmake_minimum_required(VERSION 3.15)
project(PROJECT_NAME)

set(CMAKE_CXX_STANDARD 14)

add_executable(PROJECT_NAME main.cpp)

find_package(libmongocxx REQUIRED)
find_package(libbsoncxx REQUIRED)
include_directories(${LIBMONGOCXX_INCLUDE_DIR})
include_directories(${LIBBSONCXX_INCLUDE_DIR})
include_directories("/usr/local/include/mongocxx/v_noabi")
include_directories("/usr/local/include/bsoncxx/v_noabi")
include_directories("/usr/local/include/libmongoc-1.0")
include_directories("/usr/local/include/libbson-1.0")
include_directories("/usr/local/lib")


target_link_libraries(PROJECT_NAME ${LIBMONGOCXX_LIBRARIES})
target_link_libraries(PROJECT_NAME ${LIBBSONCXX_LIBRARIES})

需要5分钟,没有C驱动程序,在尝试构建驱动程序时也没有遇到奇怪的问题。