Exemple d’installation et d’utilisation de packages : SQLite

Remarque

Cet ancien exemple utilise le mode Classique, mais la plupart des développeurs seront plus heureux avec le mode Manifeste. Consultez le mode manifeste : Exemple CMake pour obtenir un exemple de conversion en mode Manifeste.

Étape 1 : Installer

Tout d’abord, nous devons savoir quel nom SQLite passe dans l’arborescence des ports. Pour ce faire, nous allons exécuter la search commande et inspecter la sortie :

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

En examinant la liste, nous pouvons voir que le port est nommé « sqlite3 ». Vous pouvez également exécuter la search commande sans arguments pour afficher la liste complète des packages.

L’installation est ensuite aussi simple que l’utilisation de la install commande.

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))

Nous pouvons vérifier que sqlite3 a été correctement installé pour le bureau Windows x86 en exécutant la list commande.

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

Pour installer d’autres architectures et plateformes telles que plateforme Windows universelle ou x64 Desktop, vous pouvez suffixe le nom du package avec :<target>.

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

Consultez .\vcpkg help triplet toutes les cibles prises en charge.

Étape 2 : Utiliser

Projet VS/MSBuild (intégration à l’échelle de l’utilisateur)

La méthode recommandée et la plus productive pour utiliser vcpkg consiste à utiliser l’intégration à l’échelle de l’utilisateur, ce qui rend le système disponible pour tous les projets que vous créez. L’intégration à l’échelle de l’utilisateur invite l’administrateur à accéder à la première fois qu’elle est utilisée sur un ordinateur donné, mais par la suite n’est plus nécessaire et l’intégration est configurée sur une base par utilisateur.

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.

Remarque

Vous devez redémarrer Visual Studio ou effectuer une build pour mettre à jour IntelliSense avec les modifications.

Vous pouvez désormais simplement utiliser Fichier -> Nouveau projet dans Visual Studio et la bibliothèque sera automatiquement disponible. Pour SQLite, vous pouvez essayer leur exemple C/C++.

Pour supprimer l’intégration de votre utilisateur, vous pouvez utiliser .\vcpkg integrate remove.

CMake (fichier de chaîne d’outils)

La meilleure façon d’utiliser des bibliothèques installées avec cmake est via le fichier de scripts\buildsystems\vcpkg.cmakechaîne d’outils . Pour utiliser ce fichier, vous devez simplement l’ajouter à votre ligne de commande CMake comme suit :

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

Si vous utilisez CMake via Open Folder avec Visual Studio, vous pouvez définir CMAKE_TOOLCHAIN_FILE en ajoutant une section « variables » à chacune de vos CMakeSettings.json configurations :

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

Remarque

Il peut être nécessaire de supprimer le dossier du cache CMake de chaque configuration modifiée pour forcer une régénération complète. Dans le CMake menu, sous Cache (<configuration name>) vous trouverez Delete Cache Folders.

Nous allons maintenant créer un projet CMake simple avec un fichier 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;
}

Ensuite, nous créons notre projet de la façon CMake normale :

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

Remarque

La sqlite3.dll correcte est automatiquement copiée dans le dossier de sortie lors de la génération pour les fenêtres x86. Vous devez le distribuer avec votre application.

Gestion des bibliothèques sans prise en charge native de cmake

Contrairement aux autres plateformes, nous n’ajoutons pas automatiquement le include\ répertoire à votre ligne de compilation par défaut. Si vous utilisez une bibliothèque qui ne fournit pas d’intégration CMake, vous devez rechercher explicitement les fichiers et les ajouter vous-même à l’aide find_path() et 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})