Visão geral
Neste guia, você pode aprender como utilizar CMake e pkg-config para incluir o driver C++ em seu projeto.
Dados de amostra
Os exemplos nesta página usam o programa de exemplo view_and_value.cpp do código-fonte do driver C++. Obtenha o código-fonte do driver C++ seguindo o guia de download e instalação.
Nas seções a seguir, substitua <path-to-mongo-cxx-driver-sources> pelo caminho real em que a árvore de origem do driver C++ está localizada em seu sistema.
Você não precisa executar este programa em um servidor MongoDB .
Referências de bibliotecas
Os exemplos nesta página referenciam destinos de biblioteca de driver C++ . Os exemplos na seção CMake usam o destino mongo::bsoncxx_shared e os exemplos na seção pkg-config usam o pacote libbsoncxx. Você pode usar os seguintes destinos de biblioteca alternativos, dependendo das necessidades do seu projeto:
CMake: -
mongo::bsoncxx_shared-mongo::mongoccxx_shared-mongo::bsoncxx_static-mongo::mongoccxx_staticpkg-config: -
libbsoncxx-libmongocxx-libbsoncxx-static-libmongocxx-static
A disponibilidade dos destinos depende do método de instalação específico.
CCriar
Você pode usar o CMake para incluir o driver C++ em seu projeto. O CMake fornece o comando find_package, que seu projeto pode usar para localizar o driver C++ depois de instalado. Como alternativa, seu projeto pode usar o comando add_subdirectory avançado sem instalar o driver C++ .
Solução de problemas
Nas seções a seguir, se você encontrar erros, talvez seja necessário especificar opções adicionais para o comando CMake inicial. As opções específicas dependem do seu ambiente específico. No entanto, as seguintes opções resolvem os problemas mais comuns:
Se o seu compilador padrão não for pelo menos C++17, use a opção
-DCMAKE_CXX_STANDARD=17CMake.Se você instalou o driver em um local não padrão, especifique a opção
-DCMAKE_PREFIX_PATH=/<path-to-mongo-cxx-driver-installation>. Por exemplo:
cmake -Bbuild -DCMAKE_CXX_STANDARD=17 -DCMAKE_PREFIX_PATH=/opt/mongodb/cxx-driverCom instalação de driver
Depois de instalar o driver C++ , você pode usar o comando find_package do CMake para integrar o driver ao seu projeto.
Dica
Para saber como instalar o driver C++ , acesse os seguintes guias:
Faça o download e instale para instalar a partir da fonte
Opções avançadas de configuração e instalação para instalar a partir de pacotes
Para utilizar o comando find_package, crie um arquivo CMakeLists.txt no seu diretório de projeto . O exemplo seguinte cria um arquivo CMakeLists.txt no diretório de projeto do /home/user/project1 que utiliza find_package:
/log/user/ projeto1/CMakeLists.txt
cmake_minimum_required (VERSION 3.15)project (builder_basic LANGUAGES CXX)
find_package (bsoncxx 4.0 REQUIRED)
add_executable (view_and_value /<path-to-mongo-cxx-driver-sources>/examples/bsoncxx/view_and_value.cpp)
# we need target_include_directories because view_and_value.cpp refers to a common example headertarget_include_directories (view_and_value PRIVATE /<path-to-mongo-cxx-driver-sources>)target_link_libraries (view_and_value PRIVATE mongo::bsoncxx_shared)Em seguida, execute os seguintes comandos para construir seu projeto:
$ cd /home/user/project1$ cmake -Bbuild$ cmake --build buildEsses comandos retornam informações sobre o processo de construção. Após a conclusão da construção, execute o executável produzido na etapa anterior:
$ ./build/view_and_valueA saída se assemelha ao seguinte:
{ "team" : "platforms", "id" : { "$oid" : "66f4be6fef9eb8b9240619f0" }, "members" : [ "tyler", "jason", "drew", "sam", "ernie", "john", "mark", "crystal" ] }Got key, key = teamGot String!Got key, key = idGot ObjectId!Got key, key = membersGot Array!array element: tylerarray element: jasonarray element: drewarray element: samarray element: erniearray element: johnarray element: markarray element: crystalas expected, we have a teamdocument has 3 keys.document keys are:teamidmembersSem instalação de driver
Como alternativa, você pode usar o comando add_subdirectory do CMake sem instalar o driver C++ . Esta é uma técnica avançada que, ao contrário do comando find_package, não suporta a especificação de restrições de versão.
Observação
Talvez seja necessário ajustar os sinalizadores de construção do seu projeto para acomodar essa abordagem. A invocação do CMake pelo seu projeto deve incluir quaisquer sinalizadores ou opções que normalmente são passados para o driver C++ como parte de sua compilação.
Para utilizar o comando add_subdirectory, crie um arquivo CMakeLists.txt no seu diretório de projeto . O exemplo seguinte cria um arquivo CMakeLists.txt no diretório de projeto do /home/user/project2 que utiliza add_subdirectory:
/log/user/ projeto2/CMakeLists.txt
cmake_minimum_required (VERSION 3.15)project (builder_basic LANGUAGES CXX)
# specify a source_dir which is out-of-tree from this project, so also specify bin_diradd_subdirectory (/<path-to-mongo-cxx-driver-sources> ./build/mongo-cxx-driver)
add_executable (view_and_value /<path-to-mongo-cxx-driver-sources>/examples/bsoncxx/view_and_value.cpp)
# we need target_include_directories because view_and_value.cpp refers to a common example headertarget_include_directories (view_and_value PRIVATE /<path-to-mongo-cxx-driver-sources>)# no mongo:: namespace prefix, since the targets are use directly without installationtarget_link_libraries (view_and_value PRIVATE bsoncxx_shared)Observação
O exemplo anterior usa o destino bsoncxx_shared CMake sem o namespace mongo::. O namespace é adicionado como parte da instalação do módulo CMake, que não é executada nesta abordagem.
Em seguida, execute os seguintes comandos para construir seu projeto:
$ cd /home/user/project1$ cmake -Bbuild$ cmake --build buildEsses comandos retornam informações sobre o processo de construção. Após a conclusão da construção, execute o executável produzido na etapa anterior:
$ ./build/view_and_valueA saída se assemelha ao seguinte:
{ "team" : "platforms", "id" : { "$oid" : "67207dcf532837a4470cc090" }, "members" : [ "tyler", "jason", "drew", "sam", "ernie", "john", "mark", "crystal" ] }Got key, key = teamGot String!Got key, key = idGot ObjectId!Got key, key = membersGot Array!array element: tylerarray element: jasonarray element: drewarray element: samarray element: erniearray element: johnarray element: markarray element: crystalas expected, we have a teamdocument has 3 keys.document keys are:teamidmemberspacote-config
Se o seu projeto não for baseado no CMake, você poderá utilizar o pkg-config para integrar o driver C++ com seu projeto. Como o pkg-config oferece menos flexibilidade do que o CMake, recomendamos o uso da abordagem baseada no CMake quando possível.
Você só pode usar o driver C++ com pkg-config se instalar totalmente o driver.
O código a seguir usa pkg-config para incluir e vincular o driver C++ . Substitua o espaço reservado <path-to-mongo-cxx-driver-sources> pelo local da árvore de origem do driver C++ em seu sistema:
$ c++ /<path-to-mongo-cxx-driver-sources>/examples/bsoncxx/view_and_value.cpp $(pkg-config --cflags libbsoncxx) -I/<path-to-mongo-cxx-driver-sources> $(pkg-config --libs libbsoncxx) -o view_and_value$ ./view_and_value{ "team" : "platforms", "id" : { "$oid" : "67207262672b96dc3b0fc150" }, "members" : [ "tyler", "jason", "drew", "sam", "ernie", "john", "mark", "crystal" ] }Got key, key = teamGot String!Got key, key = idGot ObjectId!Got key, key = membersGot Array!array element: tylerarray element: jasonarray element: drewarray element: samarray element: erniearray element: johnarray element: markarray element: crystalas expected, we have a teamdocument has 3 keys.document keys are:teamidmembersVocê pode adaptar a linha de comando anterior para projetos mais complexos ou sistemas de compilação específicos, dependendo de como eles consomem pacotes pkg-config.