多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ### **OverView** ***** 环境: vcpkg mongo-cxx-driver cmake vscode ### **Compile** ***** #### **源代码编译(不推荐)** ***** ##### 步骤1:安装最新版本的MongoDB C驱动程序。 mongocxx驱动程序构建在MongoDB C驱动程序之上。 * 对于mongocxx-3.4.x,需要libmongoc 1.13.0或更高版本。 * 对于mongocxx-3.3.x,需要libmongoc 1.10.1或更高版本。 * 对于mongocxx-3.2.x,需要libmongoc 1.9.2或更高版本。 * 对于mongocxx-3.1.4 +,需要libmongoc 1.7.0或更高版本。 * 对于mongocxx-3.1。\[0-3\],需要libmongoc 1.5.0或更高版本。 * 对于mongocxx-3.0.x,我们建议使用libmongoc的最后1.4.x版本 ##### 步骤二:选择C ++ 17 polyfill**(可以略过) mongocxx驱动程序使用C ++ 17的功能 `std::optional`和 `std::string_view`。要编译用于预C ++ 17的mongocxx驱动程序,必须为这些功能选择以下实现之一: * MNMLSTC / core(非Windows平台的默认设置)选择 `-DBSONCXX_POLY_USE_MNMLSTC=1`。 **注意**:此选项将MNMLSTC / core的仅标头安装提供到bsoncxx库安装中,因此将在构建过程中从GitHub下载MLNMLSTC。如果您的系统上已有可用的MNMLSTC版本,则可以使用避免下载步骤`-DBSONCXX_POLY_USE_SYSTEM_MNMLSTC`。 * Boost(Windows平台的默认设置)选择 `-DBSONCXX_POLY_USE_BOOST=1`。如果您使用MSVC,这是目前唯一的选择。 `std::experimental` 选择`-DBSONCXX_POLY_USE_STD_EXPERIMENTAL=1`。如果您的工具链的标准库提供`optional`并 `string_view`在命名空间中`std::experimental`,则可以使用此选项。请注意,标准库的`std::experimental`实现可能会随着时间的推移而发生变化,从而以意外方式破坏二进制兼容性。请注意,不建议使用此填充,并且不支持此填充。 ` ` 大多数用户应该很好地坚持默认。但是,如果您的现有应用程序大量使用其中一个可用库,您可能更喜欢针对同一个库构建mongocxx驱动程序。 如果需要创建稳定的二进制接口,**请勿**更改项目的polyfill。 ` ` #### **vcpkg包管理器安装mongo-cxx-driver(推荐)** ***** [vcpkg 包管理器](../C++/%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/vcpkg.md) ##### 下载最新版本的mongocxx驱动程序。 ***** 下载 mongo-cxx-driver: ``` vcpkg install mongo-cxx-driver:x64-windows ``` ### 使用cmake构建mongo-cxx-driver demo [git地址](https://github.com/yf30301200/TestProgram/tree/master/mongo-cxx-test) CMakeList.txt编写 ``` CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(MongoCxxTest) SET(PROJECT_OUTNAME MongoCxxTest) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") endif() IF (WIN32) ELSEIF(WIN32) add_definitions(-DBSONCXX_POLY_USE_STD_EXPERIMENTAL=1) endif(WIN32) add_definitions(-DBSONCXX_POLY_USE_MNMLSTC=1) set (ThirdParty "E:/idzqj/Work/harry/IM-Server/vcpkg/installed/x64-windows") #设置头文件路径 INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/../inc ${PROJECT_SOURCE_DIR}/inc ${ThirdParty}/include ) # 设置库目录 link_directories( ${PROJECT_SOURCE_DIR}/../lib ) MESSAGE("mongocxx include:" ${ThirdParty}/include) MESSAGE("mongocxx lib:" ${ThirdParty}/lib) set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置项目 file(GLOB_RECURSE SRC_FILES src/*.cpp) file(GLOB_RECURSE HEAD_FILES inc/*.h) ADD_EXECUTABLE(${PROJECT_OUTNAME} ${SRC_FILES} ${HEAD_FILES}) target_link_libraries(${PROJECT_OUTNAME} PRIVATE mongocxx bsoncxx) install(TARGETS ${PROJECT_OUTNAME} RUNTIME DESTINATION bin) MESSAGE(STATUS "${PROJECT_OUTNAME} is BINARY dir:" ${PROJECT_BINARY_DIR}) MESSAGE(STATUS "${PROJECT_OUTNAME} is SOURCE dir:" ${PROJECT_SOURCE_DIR}) ```