Partager via


Vue d’ensemble de vcpkg

vcpkg est un gestionnaire de package C/C++ gratuit et open source géré par Microsoft et la communauté C++ qui s’exécute sur Windows, macOS et Linux. Il s’agit d’un outil C++ au cœur et écrit à l’aide de scripts C++ et CMake. Il est conçu pour traiter les points de douleur uniques avec la gestion des bibliothèques C/C++.

Pourquoi vcpkg ?

  • Plus de 2300 bibliothèques open source à choisir dans un registre organisé, conçues régulièrement pour vérifier la compatibilité ABI
  • Créer votre propre registre de bibliothèques personnalisées avec vos propres packages de bibliothèque personnalisée
  • Expérience cohérente et multiplateforme pour Windows, macOS et Linux
  • Ajouter facilement des bibliothèques à votre projet avec n’importe quel système de génération et de projet
  • Créer des dépendances à partir de fichiers binaires vérifiés par ABI ou télécharger des fichiers binaires prédéfinis, avec plus de 70 configurations disponibles par défaut et une personnalisation infinie pour vos besoins spécifiques
  • Empêcher les conflits de version et les problèmes de diamant entre vos dépendances avec une conception de contrôle de version unique
  • Pour les utilisateurs MSBuild et CMake : intégration automatique à votre environnement de génération pour une expérience d’acquisition de dépendance transparente
  • Approuvé par les étudiants, les développeurs open source, les amateurs et les professionnels, y compris certaines des plus grandes entreprises

Fonctionnalités vcpkg

Ports et triplets

Un port vcpkg est une recette de build versionnée qui produit un package. Le type de package le plus courant est une bibliothèque C/C++ composée d’en-têtes, de code source et de fichiers binaires.

Un triplet capture l’environnement de build cible (processeur, système d’exploitation, compilateur, runtime, etc.) dans un nom unique et pratique. vcpkg fournit plus de 70 triplets par défaut, mais vous pouvez également définir vos propres.

Pour installer un package sur votre système, vcpkg exécute le fichier de recette du port, qui est un script CMake. Le script peut contenir des étapes pour télécharger le code source ou exécuter une build sur votre système. Pendant les builds, vcpkg utilise les informations de votre triplet pour vous assurer que le package produit correspond à votre configuration souhaitée.

Mise en cache binaire

Bien que vcpkg génère des bibliothèques à partir de la source chaque fois qu’il est nécessaire, vous pouvez sauvegarder vos packages générés dans un cache binaire. Cela permet à d’autres ordinateurs de développement ou à des exécutions d’intégration continue de référencer ces packages prédéfinis sans exécuter de nouvelle build à chaque fois. vcpkg détermine si une reconstruction est nécessaire en vérifiant si le cache contient déjà un package existant valide avec les fichiers binaires appropriés.

Manifestes

Vous pouvez déclarer vos dépendances directes et ajouter des fonctionnalités facultatives ou des contraintes de version dans un fichier manifeste. Les fichiers manifestes peuvent être archivés dans votre système de contrôle de code source et partagés avec votre équipe.

Contrôle de version

vcpkg a un moyen unique de gérer les versions de package. Votre fichier manifeste peut référencer une version de référence unique définie par défaut. La base de référence vous offre une gestion des dépendances sans problème et sans conflit avec une reproductibilité totale. En outre, vous pouvez toujours avoir un contrôle plus avancé en épinglant des versions de package individuelles.

Registres

Un registre est une collection de ports et de versions disponibles qu’un utilisateur vcpkg peut installer. vcpkg fournit un registre organisé de bibliothèques open source par défaut. Vous pouvez également créer vos propres registres pour les personnalisations, les correctifs ou les bibliothèques privées.

Mise en cache des ressources

La mise en cache des ressources permet à vcpkg de fonctionner dans des environnements hors connexion et en air, ce qui garantit la continuité de l’activité même si un hôte distant tombe en panne ou est compromis. Il utilise des miroirs de téléchargement pour charger et restaurer des ressources telles que le code source et les outils de génération.

vcpkg comparé à d’autres gestionnaires de package

vcpkg comparé à NuGet

NuGet est un gestionnaire de package .NET qui est souvent utilisé pour le développement C/C++, en particulier pour les solutions MSBuild qui contiennent des projets .NET. En règle générale, l’équipe Microsoft C++ ne recommande pas d’utiliser NuGet pour le développement C/C++, car NuGet présente plusieurs limitations :

  • Saveurs de compilation. Étant donné que NuGet ne peut pas générer de packages à partir de la source à la volée, il est nécessaire de fournir des fichiers binaires prédéfinis pour correspondre à toutes les restrictions ABI (Application Binary Interface) possibles pour tous les utilisateurs. L’utilisateur est responsable de la création correcte de packages. Il est également difficile de faire la distinction entre les fichiers binaires en raison de l’absence de métadonnées pertinentes. Cela entraîne la saisie d’architecture, de système d’exploitation et d’informations du compilateur par l’utilisateur dans le nom du package. Cela n’est pas souhaitable, car les contraintes sur l’architecture, le système d’exploitation et les informations du compilateur ne peuvent pas être appliquées pendant l’acquisition du package.
  • Binaire et source. NuGet est conçu à partir du terrain pour fournir des fichiers binaires relativement petits et prédéfinis. Les développeurs doivent avoir accès au code source pour garantir la compatibilité, les performances, l’intégrité et la débogage ABI.
  • Aucune prise en charge nuGet PackageReference. NuGet PackageReference n’est pas pris en charge pour .vcxproj les fichiers et il n’existe pas de plan pour l’ajouter ultérieurement en raison de différences techniques et architecturales entre les projets C++ et .NET MSBuild. Cela signifie que les utilisateurs NuGet C++ ne bénéficieront pas de fonctionnalités telles que l’utilisation du cache global et le référencement des dépendances en termes MSBuild simples avec accès à la logique conditionnelle.
  • Suivi ABI transitif. vcpkg reconstruit les dépendances open source affectées par une modification dans un package particulier. Par exemple, si une nouvelle mise à jour est publiée pour Boost, vcpkg régénère toutes les dépendances de Boost et les bibliothèques qui dépendent de Boost, pour s’assurer qu’elles fonctionnent toujours. Les demandes de tirage pour mettre à jour les bibliothèques dans le référentiel vcpkg ne sont pas fusionnées tant que les conflits au moment de la génération ne sont pas résolus.

vcpkg comparé aux gestionnaires de packages système

Il existe un large éventail de gestionnaires de packages système pour Linux, macOS et Windows qui peuvent être utilisés pour acquérir et gérer des bibliothèques C/C++. Ces gestionnaires de packages sont généralement d’excellents choix pour la gestion des applications. Mais en raison de la nature générique de leur support, ils ne parviennent souvent pas à fournir des fonctionnalités bénéfiques en particulier pour les développeurs C/C++. Bien que votre kilométrage varie et que certains gestionnaires de packages système fournissent certaines de ces fonctionnalités, aucune n’a toutes les fonctionnalités suivantes :

  • Ressources de développeur redistribuables : vcpkg peut acquérir des ressources de développeur redistribuables pour faciliter le débogage.
  • Packages prédéfinis et build à partir de la source : vcpkg peut générer des packages à partir de la source en fonction de vos besoins personnalisés. Il n’est pas nécessaire de gérer les packages prédéfinis et précompilés pour qu’ils fonctionnent.
  • Gestion des versions à l’échelle du catalogue : vcpkg vous permet de dépendre d’un ensemble de versions de packages compatibles, plutôt que de devoir micromanager des versions de package individuelles. Vous pouvez toujours le faire si nécessaire, mais l’expérience par défaut est conçue pour être facile à utiliser.
  • Plusieurs copies de la même bibliothèque sur un système : vous pouvez avoir plusieurs copies de la même dépendance installée sur le même système avec vcpkg, tandis que les gestionnaires de packages système peuvent installer une version dans un emplacement unique à l’échelle du système. Cela complique les choses lorsque vous avez plusieurs projets en fonction des différentes versions d’une bibliothèque.
  • Taille du catalogue : étant donné que vcpkg est spécialisé pour C/C++, il dispose d’une collection de bibliothèques C/C++ très volumineuse par rapport aux gestionnaires de packages système, et il est géré activement. En général, vous êtes plus susceptible de trouver des bibliothèques utiles et à jour pour le développement C++.
  • Prise en charge multiplateforme : les gestionnaires de packages système fournissent des packages verrouillés sur un système particulier. Si vous devez cibler plusieurs versions du système d’exploitation, vous devez trouver un autre gestionnaire de package pour le deuxième système. En revanche, vcpkg est un gestionnaire de package multiplateforme. Vous devez donc simplement ajuster vos builds cibles en conséquence.

Il existe des situations où un gestionnaire de package système est absolument logique :

  • Les gestionnaires de packages système ont tendance à effectuer un bon travail en fournissant et en conservant des bibliothèques spécifiques à ce système
  • Les packages prédéfinis doivent fonctionner sur ce système si votre projet consommateur a une configuration de build simple.
  • Si vous n’avez pas l’intention d’effectuer de développement multiplateforme, vous ne rencontrerez pas de problèmes de compatibilité du système d’exploitation avec un gestionnaire de package système.

vcpkg est conçu pour travailler côte à côte avec les gestionnaires de packages système. N’hésitez donc pas à utiliser l’outil qui vous convient le plus pour chaque dépendance.

Prise en main de vcpkg

Pour essayer vcpkg, consultez nos didacticiels d’introduction :

Si votre système de build n’est pas CMake ou MSBuild, vcpkg prend également en charge l’intégration manuelle à votre environnement préféré.