无法找到包含标头

时间:2015-10-08 11:10:54

标签: c++ mongodb cmake

我在连接一个小的mongodb cxx程序时遇到问题。在我看来,一切都应该起作用,但我确信我还没有做过什么。

问题在于找不到mongocxx标头。

我在cmake中使用pkg_config

执行此操作

我的项目

#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{};

    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;
    }
}

我的Cmake

cmake_minimum_required(VERSION 3.3)
set(project "Untitled")
project(${project})

find_package(PkgConfig)
INCLUDE(FindPkgConfig)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

pkg_check_modules(LIBMONGOCXX REQUIRED libmongocxx)
pkg_check_modules(LIBBSONCXX REQUIRED libbsoncxx)

include_directories(${LIBMONGOCXX_INCLUDE_DIRS} ${LIBBSONCXX_INCLUDE_DIRS})
link_directories(${LIBMONGOCXX_LIBRARY_DIRS} ${LIBBSONCXX_LIBRARY_DIRS})

add_executable(${project} ${SOURCE_FILES})

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

和libmongocxx的pkg-configs输出

[sam@localhost ~]$ pkg-config --cflags libmongocxx
-I/usr/local/include/mongocxx/v0.3 -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/bsoncxx/v0.3 -I/usr/local/include/libbson-1.0

这些是正确的路径,应该正确链接。如果我要改变

set(${LIBMONGOCXX_INCLUDE_DIRS} /usr/local/include/mongocxx/v0.3)

它可以工作但是它会在找不到库时出现问题,依此类推。我希望我可以使用Makefile,但我必须使用Cmake。

1 个答案:

答案 0 :(得分:0)

这是一个糟糕的问题(正如usr1234567指出的那样),问题在于如何编译cmake和我的mongocxx驱动程序的代码,而不是cmake。

我在一个新的虚拟机中重新编译了代码,然后用cmake 3.3开始工作。