Compartir a través de


Ejemplo de instalación y uso de paquetes: SQLite

Nota:

En este ejemplo anterior se usa el modo clásico, pero la mayoría de los desarrolladores estarán más felices con el modo manifiesto. Vea Modo de manifiesto: Ejemplo de CMake para obtener un ejemplo de conversión al modo manifiesto.

Paso 1: Instalar

En primer lugar, es necesario saber el nombre que va SQLite en el árbol de puertos. Para ello, ejecutaremos el search comando e inspeccionaremos la salida:

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

Al examinar la lista, podemos ver que el puerto se denomina "sqlite3". También puede ejecutar el search comando sin argumentos para ver la lista completa de paquetes.

La instalación es tan sencilla como usar el 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 comprobar que sqlite3 se instaló correctamente para el escritorio de Windows x86 ejecutando el 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 otras arquitecturas y plataformas como Plataforma universal de Windows o x64 Desktop, puede sufijo el nombre del paquete con :<target>.

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

Consulte .\vcpkg help triplet para ver todos los destinos admitidos.

Paso 2: Usar

Proyecto de VS/MSBuild (integración para todo el usuario)

La forma recomendada y más productiva de usar vcpkg es a través de la integración en todo el usuario, lo que hace que el sistema esté disponible para todos los proyectos que compile. La integración en todo el usuario solicitará acceso de administrador la primera vez que se use en una máquina determinada, pero después ya no es necesaria y la integración se configura por usuario.

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.

Nota:

Tendrá que reiniciar Visual Studio o realizar una compilación para actualizar IntelliSense con los cambios.

Ahora puede usar archivo:> nuevo proyecto en Visual Studio y la biblioteca estará disponible automáticamente. Para SQLite, puede probar su ejemplo de C/C++.

Para quitar la integración del usuario, puede usar .\vcpkg integrate remove.

CMake (archivo de cadena de herramientas)

La mejor manera de usar bibliotecas instaladas con cmake es a través del archivo scripts\buildsystems\vcpkg.cmaketoolchain . Para usar este archivo, basta con agregarlo a la línea de comandos de CMake como:

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

Si usa CMake a través de Open Folder con Visual Studio, puede definir CMAKE_TOOLCHAIN_FILE agregando una sección "variables" a cada una de las CMakeSettings.json configuraciones:

{
  "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"
    }]
  }]
}

Nota:

Es posible que sea necesario eliminar la carpeta de caché de CMake de cada configuración modificada para forzar una regeneración completa. En el CMake menú, en Cache (<configuration name>) encontrará Delete Cache Folders.

Ahora vamos a crear un proyecto CMake simple con un archivo 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;
}

A continuación, creamos nuestro proyecto de la manera normal de 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

Nota:

El sqlite3.dll correcto se copia automáticamente en la carpeta de salida al compilar para x86-windows. Deberá distribuirlo junto con la aplicación.

Control de bibliotecas sin compatibilidad nativa con cmake

A diferencia de otras plataformas, no agregamos automáticamente el include\ directorio a la línea de compilación de forma predeterminada. Si usa una biblioteca que no proporciona integración de CMake, deberá buscar explícitamente los archivos y agregarlos mediante find_path() y 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})