MongoDB示例无法使用不同的标志进行编译

时间:2015-07-01 00:33:03

标签: c++ mongodb c++11

编译MongoDB Quickstart(新驱动程序)提供的代码片段后,编译结果非常奇怪。

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

代码与

完美编译
c++ --std=c++11 hellomongo.cpp -o hellomongo $(pkg-config --cflags --libs libmongocxx)

但是当我创建一个makefile并添加了一些标志

时无法编译
CXX=g++
 FLAGS=-v -Wall --std=c++11 -I/usr/local/include
 EXENAME=matchingengine
 SOURCES=main.cpp
 OBJECTS=main.o

 all: $(EXENAME)

 $(EXENAME): $(OBJECTS)
     $(CXX) $(FLAGS) $(SOURCES) -o $(EXENAME)

 clean:
     rm *o $(EXENAME)

我一直在

main.cpp:3:10: fatal error: 'bsoncxx/builder/stream/document.hpp' file not found

我调整了指向bsoncxx所在位置的-I include目录。请帮我解决这个编译问题。

1 个答案:

答案 0 :(得分:1)

我解决了它

生成文件

    CXX=g++
 CFLAGS=-c --std=c++11 -Wall -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
 LDFLAGS=-L/usr/local/lib -lmongocxx -lbsoncxx
 SOURCES=main.cpp
 OBJECTS=main.o
 EXECUTABLE=matchingengine

 all: $(EXECUTABLE)

 $(EXECUTABLE): $(OBJECTS)
     $(CXX) $(OBJECTS) -o $(EXECUTABLE) $(LDFLAGS)

 $(OBJECTS): $(SOURCES)
     $(CXX) $(CFLAGS) -c $(SOURCES)