Vcpkg est un gestionnaire de paquets open source, maintenu par Microsoft qui permet d'installer des bibliothèques C++. Si vous n’aviez jamais entendu parler de vcpkg, nous ne connaissions pas non plus. C'est un de nos utilisateurs qui nous a fait découvrir ce projet. Voyons ce qu'il en est.
Comme nous l'avons dit, nous avons découvert ce projet quand un utilisateur a commencé à porter notre librairie C++ dans ce gestionnaire de paquets. Comme d'habitude, on a regardé s’il nous était possible de faciliter la vie de nos utilisateurs en ajoutant notre librairie à vcpkg, et, même si nous ne sommes pas complètement convaincus par vcpkg, nous avons décidé de publier notre libraire sur ce gestionnaire.
vcpkg kézaco?
Vcpkg est un outil en ligne de commande qui permet de télécharger et compiler les bibliothèques C++ qui sont utilisées dans un projet. C'est un peu la même idée que Npm pour JavaScript ou Pip pour Python.
Bien qu'il soit maintenu par Microsoft, vcpkg est cross plateforme et fonctionne sous Windows, Linux et macOS. Il peut s'intégrer avec CMake, Visual Studio et Visual Studio Code.
Installer vcpkg ?
Pour installer vcpkg, il faut cloner le repository Git et lancer la commande bootstrap-vcpkg et ajouter vcpkg à votre PATH.
git clone https://github.com/microsoft/vcpkg.git .\bootstrap-vcpkg.bat set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
Il faut aussi avoir installé CMake et un compilateur C++.
Un petit projet
Pour illustrer l'utilisation de vcpkg, on va reprendre l'exemple de la documentation de vcpkg, mais utiliser notre librairie C++ et le code de notre tutoriel.
Le code de l'exemple va simplement afficher les modules Yoctopuce branchés sur les ports USB.
using namespace std;
int main(int argc, const char * argv[])
{
string errmsg;
// Sets up the API to use local USB devices
if(YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
cerr << "RegisterHub error: " << errmsg << endl;
return 1;
}
cout << "Device list: " << endl;
YModule *module = YModule::FirstModule();
while (module != NULL) {
cout << module->get_serialNumber() << " ";
cout << module->get_productName() << endl;
module = module->nextModule();
}
YAPI::FreeAPI();
return 0;
}
On va ensuite utiliser vcpkg pour créer un nouveau projet et ajouter une dépendance à notre librairie yoctolib.
C:\tmp\helloworld>vcpkg new --application C:\tmp\helloworld>vcpkg add port yoctolib
Puis il faut créer le fichier CMakeLists.txt qui sera utilisé par CMake
cmake_minimum_required(VERSION 3.10) project(HelloWorld) find_package(yoctolib CONFIG REQUIRED) add_executable(HelloWorld helloworld.cpp) target_link_libraries(HelloWorld PRIVATE yoctolib::YoctoLib)
Enfin il ne reste plus qu'à compiler et exécuter le projet en utilisant CMake:
C:\tmp\helloworld>cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=/[chemin_vers_vcpkg/scripts/buildsystems/vcpkg.cmake C:\tmp\helloworld>cmake --build build C:\tmp\helloworld>.\build\Debug\HelloWorld.exe Device list: YPWMRX01-AE391 Yocto-PWM-Rx RELAYLO1-27EAB Yocto-Relay YBUTTON1-2072D Yocto-Knob YPWMTX01-B9625 Yocto-PWM-Tx
Conclusion
Comme nous l'avons dit, nous ne sommes pas complètement convaincus de vcpkg. On préfère gérer manuellement l'installation et la compilation de nos librairies.
Mais le but de nos libraires de programmation est de faciliter l'intégration de nos modules dans les applications de nos clients. C'est pour cette raison que nous avons ajouté notre librairie au repository vcpkg.
