Depuis près de 6 mois (le 24 avril 2018) le package manager vcpkg est disponible sur toutes les plateformes de développement lié au C++ (lien reddit). Cela fait des années que la gestion de dépendances en C++ est d’une compléxité sans nom. Nous allons donc aujourd’hui tenter de démystifier l’outil qu’est VCPKG et vous démontrer à quel point il nous change la vie.

VCPKG : Made by Microsoft

VCPKG est un projet open-source développé par Microsoft accessible sur Github.

Il y a pour l’instant deux mainteneurs officiels du projet :

  • Robert Schumacher (Software Engineer Microsoft)
  • Alexander Karatarakis (Software Engineer Microsoft)

Vous pouvez discuter directement avec eux sur le slack officiel du C++ : cpplang.

VCPKG: Philosophie

Contrairement à d’autres gestionnaires de paquets, VCPKG est centralisé (tous les récipients des différents paquets sont stockés dans le répertoire source de VCPKG dans VCPKG_ROOT/ports).

NB : Vous n’avez pas besoin d’être administrateur (root) pour installer vos paquets, qui ne sont d’ailleurs pas liés à ceux déjà installés par votre gestionnaire de paquet de votre système d’exploitation.

VCPKG: Comment l’installer ?

Prérequis

  • Windows 10, 8.1, 7, Linux, ou MacOS.
  • Visual Studio 2017 ou Visual Studio 2015 Update 3 (sur Windows)
  • Git
  • CMake 3.11

Windows

Sur Windows, ouvrez Powershell et tapez les commandes suivantes :

git clone https://github.com/Microsoft/vcpkg
Set-Location vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg integrate install

Linux/OSX

Sur Linux/OSX ouvrez un terminal et tapez les commandes suivantes :

git clone https://github.com/Microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install

VCPKG: Comment rechercher un paquet ?

Il vous suffira de taper la commande suivante :

vcpkg search [pattern]

S’il est déjà installé, vous pourrez alors utiliser la commande :

vcpkg list

VCPKG: Comment installer un paquet

Pour installer un paquet avec vcpkg, il suffit de taper cette commande :

./vcpkg install sdl2 [paquet_additionnels ...]

Vous pouvez aussi utiliser des options intéréssantes, comme installer un paquet depuis son dernier commit (s’il s’agit d’un paquet avec comme source un répertoire GitHub) :

./vcpkg install spdlog --head

Enfin sur Windows, vous pouvez spécifier la plateforme (par défaut il s’agit de 32-bit) et le type de librairie (par défaut il vous construira une librairie partagée) :

.\vcpkg install boost:x64-Windows
.\vcpkg install boost:x32-Windows
.\vcpkg install boost:x64-Windows-static

Comment update un paquet installé ?

Il vous suffira de taper cette commande :

## ! Remplacer la commande suivante par la racine du dossier de VCPKG
cd $VCPKG_ROOT
git pull
./vcpkg upgrade --no-dry-run

VCPKG: Utiliser un paquet installé

Nous allons partir du principe que nous avons envie d’utiliser Boost.Filesystem dans notre projet et que nous sommes sur Linux.

La première étape consiste à installer le paquet :

vcpkg install boost-filesystem

La deuxième étape consiste à créer un CMake pour notre projet :

cmake_minimum_required(VERSION 3.11)
 
## On recherche Boost.Filesystem
find_package(Boost COMPONENTS system filesystem REQUIRED)
 
## On crée l'executable et on link Boost.Filesystem dessus
add_executable(mon_executable main.cpp)
target_link_libraries(mon_executable PUBLIC Boost::filesystem)

Un main.cpp pour notre projet :

Il nous suffira simplement ensuite de faire un shadow-build et de construire notre projet :

mkdir build
cd build
## La commande suivante vous a été donné quand vous avez tapé vcpkg integrate install
cmake .. -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake

On peut ensuite éxécuter notre programme :

./mon_executable

VCPKG: Comment ça fonctionne en interne ?

  • Chacune des librairies dans l’environnement VCPKG possède un portfile (un script CMake) qui va télécharger les sources ou les binaires de votre librairie, configurer la construction du paquet (des options).
  • VCPKG fournit une toolchain vcpkg.cmake qui va vous permettre de faire le lien entre les librairies que vous avez installé avec VCPKG et votre projet qui les utilise.
  • La toolchain vcpkg.cmake vous permet également d’utiliser des librairies qui n’ont pas obligatoirement un support CMake, en effet CMAKE_LIBRARY_PATH pointe vers le dossier où les librairies sont installées; de cette façon, find_library et find_package fonctionnent nativement.

Conclusion

Dans cet article, nous avons expliqué ce qu’était VCPKG et comment installer des librairies avec VCPKG. Nous avons également fourni un exemple de projet CMake qui utilise une librairie que l’on avait installé avec VCPKG. Si vous êtes habitué(e) a travailler avec du C++ et des dépendances, VCPKG vous fera certainement gagner du temps de développement non négligeable.

Liens intéressants :


0 commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

VCPKG : Un package manager en C++

par Roman Sztergbaum temps de lecture : 3 min
0