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 toolchainvcpkg.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 effetCMAKE_LIBRARY_PATH
pointe vers le dossier où les librairies sont installées; de cette façon,find_library
etfind_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.
0 commentaire