Incluir e vincular o driver em seu programa
Visão geral
Neste guia, você aprenderá a usar o CMake e o 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 dedownload 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_static
pkg-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=17
CMake.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-driver
Com 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
:
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 header target_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 build
Esses 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_value
A saída se assemelha ao seguinte:
{ "team" : "platforms", "id" : { "$oid" : "66f4be6fef9eb8b9240619f0" }, "members" : [ "tyler", "jason", "drew", "sam", "ernie", "john", "mark", "crystal" ] } Got key, key = team Got String! Got key, key = id Got ObjectId! Got key, key = members Got Array! array element: tyler array element: jason array element: drew array element: sam array element: ernie array element: john array element: mark array element: crystal as expected, we have a team document has 3 keys. document keys are: team id members
Sem 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
:
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_dir add_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 header target_include_directories (view_and_value PRIVATE /<path-to-mongo-cxx-driver-sources>) # no mongo:: namespace prefix, since the targets are use directly without installation target_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 build
Esses 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_value
A saída se assemelha ao seguinte:
{ "team" : "platforms", "id" : { "$oid" : "67207dcf532837a4470cc090" }, "members" : [ "tyler", "jason", "drew", "sam", "ernie", "john", "mark", "crystal" ] } Got key, key = team Got String! Got key, key = id Got ObjectId! Got key, key = members Got Array! array element: tyler array element: jason array element: drew array element: sam array element: ernie array element: john array element: mark array element: crystal as expected, we have a team document has 3 keys. document keys are: team id members
pacote-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 = team Got String! Got key, key = id Got ObjectId! Got key, key = members Got Array! array element: tyler array element: jason array element: drew array element: sam array element: ernie array element: john array element: mark array element: crystal as expected, we have a team document has 3 keys. document keys are: team id members
Você 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.