Share via


Exemplo de instalação e uso de pacotes: SQLite

Observação

Este exemplo antigo usa o modo Clássico, mas a maioria dos desenvolvedores ficará mais feliz com o modo Manifesto. Consulte Modo de manifesto: Exemplo de CMake para obter um exemplo de conversão para o modo de manifesto.

Etapa 1: instalar

Primeiro, precisamos saber qual nome o SQLite passa na árvore de portes. Para fazer isso, vamos executar o search comando e inspecionar a saída:

PS D:\src\vcpkg> .\vcpkg search sqlite
libodb-sqlite        2.4.0            Sqlite support for the ODB ORM library
sqlite3              3.32.1           SQLite is a software library that implements a se...

If your library is not listed, please open an issue at:
    https://github.com/Microsoft/vcpkg/issues

Olhando para a lista, podemos ver que a porta é chamada de "sqlite3". Você também pode executar o search comando sem argumentos para ver a lista completa de pacotes.

A instalação é tão simples quanto usar o install comando.

PS D:\src\vcpkg> .\vcpkg install sqlite3
Computing installation plan...
The following packages will be built and installed:
    sqlite3[core]:x86-windows
Starting package 1/1: sqlite3:x86-windows
Building package sqlite3[core]:x86-windows...
-- Downloading https://sqlite.org/2020/sqlite-amalgamation-3320100.zip...
-- Extracting source C:/src/vcpkg/downloads/sqlite-amalgamation-3320100.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at C:/src/vcpkg/buildtrees/sqlite3/src/3320100-15aeda126a.clean
-- Configuring x86-windows
-- Building x86-windows-dbg
-- Building x86-windows-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x86-windows... done
Installing package sqlite3[core]:x86-windows...
Installing package sqlite3[core]:x86-windows... done
Elapsed time for package sqlite3:x86-windows: 12 s

Total elapsed time: 12.04 s

The package sqlite3:x86-windows provides CMake targets:

    find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3))

Podemos verificar se o sqlite3 foi instalado com êxito para a área de trabalho do Windows x86 executando o list comando.

PS D:\src\vcpkg> .\vcpkg list
sqlite3:x86-windows         3.32.1           SQLite is a software library that implements a se...

Para instalar para outras arquiteturas e plataformas, como a Plataforma Universal do Windows ou a Área de Trabalho x64, você pode sufixar o nome do pacote com :<target>.

PS D:\src\vcpkg> .\vcpkg install sqlite3:x86-uwp zlib:x64-windows

Consulte .\vcpkg help triplet todos os destinos suportados.

Etapa 2: Usar

Projeto VS/MSBuild (integração em todo o usuário)

A maneira recomendada e mais produtiva de usar o vcpkg é através da integração em todo o usuário, tornando o sistema disponível para todos os projetos que você construir. A integração em todo o usuário solicitará o acesso do administrador na primeira vez que for usada em uma determinada máquina, mas depois não será mais necessária e a integração será configurada por usuário.

PS D:\src\vcpkg> .\vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

Observação

Você precisará reiniciar o Visual Studio ou executar uma compilação para atualizar o intellisense com as alterações.

Agora você pode simplesmente usar Arquivo -> Novo Projeto no Visual Studio e a biblioteca estará automaticamente disponível. Para SQLite, você pode experimentar seu exemplo C/C++.

Para remover a integração para seu usuário, você pode usar .\vcpkg integrate removeo .

CMake (Arquivo Toolchain)

A melhor maneira de usar bibliotecas instaladas com cmake é através do arquivo scripts\buildsystems\vcpkg.cmaketoolchain . Para usar esse arquivo, basta adicioná-lo à sua linha de comando do CMake como:

-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake.

Se você estiver usando o CMake por meio de Open Folder com o Visual Studio, você pode definir CMAKE_TOOLCHAIN_FILE adicionando uma seção "variáveis" a cada uma de suas CMakeSettings.json configurações:

{
  "configurations": [{
    "name": "x86-Debug",
    "generator": "Visual Studio 15 2017",
    "configurationType" : "Debug",
    "buildRoot":  "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}",
    "cmakeCommandArgs": "",
    "buildCommandArgs": "-m -v:minimal",
    "variables": [{
      "name": "CMAKE_TOOLCHAIN_FILE",
      "value": "D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
    }]
  }]
}

Observação

Pode ser necessário excluir a pasta de cache CMake de cada configuração modificada, para forçar uma regeneração completa. CMake No menu, em Cache (<configuration name>) , você encontrará Delete Cache Folders.

Agora vamos fazer um projeto CMake simples com um arquivo principal.

# CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test)

find_package(unofficial-sqlite3 CONFIG REQUIRED)

add_executable(main main.cpp)

target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
// main.cpp
#include <sqlite3.h>
#include <stdio.h>

int main()
{
    printf("%s\n", sqlite3_libversion());
    return 0;
}

Então, construímos nosso projeto da maneira normal do CMake:

PS D:\src\cmake-test> mkdir build 
PS D:\src\cmake-test> cd build
PS D:\src\cmake-test\build> cmake .. "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake"
    // omitted CMake output here //
-- Build files have been written to: D:/src/cmake-test/build
PS D:\src\cmake-test\build> cmake --build .
    // omitted MSBuild output here //
Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:02.38
PS D:\src\cmake-test\build> .\Debug\main.exe
3.15.0

Observação

O sqlite3.dll correto é copiado automaticamente para a pasta de saída ao criar para x86-windows. Você precisará distribuir isso junto com seu aplicativo.

Manipulando bibliotecas sem suporte nativo a cmake

Ao contrário de outras plataformas, não adicionamos automaticamente o diretório à sua linha de include\ compilação por padrão. Se você estiver usando uma biblioteca que não fornece integração com o CMake, precisará pesquisar explicitamente os arquivos e adicioná-los usando find_path() e find_library().

# To find and use catch
find_path(CATCH_INCLUDE_DIR catch.hpp)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})

# To find and use azure-storage-cpp
find_path(WASTORAGE_INCLUDE_DIR was/blob.h)
find_library(WASTORAGE_LIBRARY wastorage)
target_include_directories(main PRIVATE ${WASTORAGE_INCLUDE_DIR})
target_link_libraries(main PRIVATE ${WASTORAGE_LIBRARY})