vcpkg dans les projets MSBuild

Méthodes d’intégration

Intégration à l’échelle de l’utilisateur

Pour utiliser vcpkg dans vos projets MSBuild, exécutez la commande suivante :

vcpkg integrate install

Vous devez uniquement exécuter la vcpkg integrate install commande la première fois que vous souhaitez activer l’intégration MSBuild. Cela permet l’intégration de MSBuild pour tous vos projets existants et futurs.

Si vous avez plusieurs instances de vcpkg, vous pouvez utiliser la commande pour mettre à jour l’instance vcpkg integrate install vcpkg utilisée dans MSBuild. Permet vcpkg integrate remove de supprimer l’intégration à l’échelle de l’utilisateur MSBuild.

Cette méthode d’intégration ajoute automatiquement des packages installés sur vcpkg aux propriétés de projet suivantes : Inclure des répertoires, des répertoires de liens et des bibliothèques de liens. En outre, cela crée une action post-build qui garantit que toutes les DLL requises sont copiées dans le dossier de sortie de build. Cela fonctionne pour toutes les solutions et projets à l’aide de Visual Studio 2015 ou version ultérieure.

C’est tout ce que vous devez faire pour la grande majorité des bibliothèques. Toutefois, certaines bibliothèques effectuent des comportements en conflit, tels que la main()redéfinition . Étant donné que vous devez choisir par projet parmi ces options conflictuelles souhaitées, vous devez ajouter manuellement ces bibliothèques à vos entrées de l’éditeur de liens.

Voici quelques exemples où la liaison manuelle est nécessaire (pas une liste exhaustive) :

  • Gtest fournit gtest, gmock, gtest_mainet gmock_main
  • SDL2 fournit SDL2main
  • SFML fournit sfml-main
  • Boost.Test fournit boost_test_exec_monitor

Pour obtenir une liste complète de tous vos packages installés, exécutez vcpkg owns manual-link.

Importer .props et .targets

vcpkg peut également être intégré dans des projets MSBuild en important explicitement les fichiers et scripts/buildsystems/vcpkg.targets les scripts/buildsystems/vcpkg.props fichiers dans chacun d’eux.vcxproj. En utilisant des chemins d’accès relatifs, cela permet à vcpkg d’être consommé par un sous-module et automatiquement acquis par les utilisateurs lorsqu’ils s’exécutent git clone.

Le moyen le plus simple d’ajouter ces éléments à chaque projet de votre solution consiste à créer et à créer Directory.Build.props des Directory.Build.targets fichiers à la racine de votre dépôt.

Les exemples suivants supposent qu’ils se trouvent à la racine de votre référentiel avec un sous-module de microsoft/vcpkg at vcpkg.

Exemple Directory.Build.props

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>

Exemple Directory.Build.targets

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>

Consultez la section Personnaliser votre build de la documentation MSBuild officielle pour plus d’informations sur Directory.Build.targets et Directory.Build.props.

Package NuGet lié

Remarque

Cette approche n’est pas recommandée pour les nouveaux projets, car elle les rend difficiles à partager avec d’autres personnes. Pour un package NuGet portable autonome, consultez le export commandfichier .

Les projets VS peuvent également être intégrés via un package NuGet. Cela modifie le fichier projet. Nous vous déconseillons donc cette approche pour les projets code source ouvert.

PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg

With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"

Remarque

Le package NuGet généré ne contient pas les bibliothèques réelles. Elle agit plutôt comme un raccourci (ou un lien symbolique) vers l’installation de vcpkg et se met à jour automatiquement avec toutes les modifications (installation/suppression) apportées aux bibliothèques. Vous n’avez pas besoin de régénérer ou de mettre à jour le package NuGet.

Configuration courante

VcpkgEnabled (Utiliser Vcpkg)

Cela peut être défini sur « false » pour désactiver explicitement l’intégration de vcpkg pour le projet

VcpkgConfiguration (Configuration de Vcpkg)

Si vos noms de configuration sont trop complexes pour que vcpkg suppose correctement, vous pouvez affecter cette propriété à Release ou Debug indiquer explicitement à vcpkg quelle variante de bibliothèques vous souhaitez consommer.

VcpkgEnableManifest (Utiliser le manifeste Vcpkg)

Cette propriété doit être définie true pour pouvoir consommer à partir d’un fichier local vcpkg.json . Si la valeur est définie false, tous les fichiers locaux vcpkg.json sont ignorés.

Cette valeur est actuellement la valeur par défaut , mais elle sera par défaut falsetrue dans le futur.

VcpkgTriplet (Triplet)

Cette propriété contrôle le triplet à partir duquel consommer des bibliothèques, telles que x64-windows-static ou arm64-windows.

S’il n’est pas défini explicitement, vcpkg déduira le triplet correct en fonction de vos paramètres Visual Studio. vcpkg déduira uniquement les triplets qui utilisent la liaison de bibliothèque dynamique et la liaison CRT dynamique ; si vous souhaitez des dépendances statiques ou utiliser le CRT statique (/MT), vous devez définir le triplet manuellement.

Vous pouvez voir le triplet déduit automatiquement en définissant votre verbe MSBuild sur Normal ou supérieur :

Raccourci : Ctrl+Q « générer et exécuter »

Outils -> Options -> Projets et solutions -> Générer et exécuter -> Détail de génération de projet MSBuild

Voir aussi Triplets

VcpkgHostTriplet (Triplet de l’hôte)

Cela peut être défini sur un triplet personnalisé à utiliser pour résoudre les dépendances de l’hôte.

Si ce paramètre n’est pas défini, il s’agit par défaut du triplet « natif » (x64-windows).

Consultez également les dépendances de l’hôte.

VcpkgInstalledDir (Répertoire installé)

Cette propriété définit l’emplacement à partir duquel vcpkg installe et consomme des bibliothèques.

En mode manifeste, cette valeur par défaut est $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\. En mode classique, cette valeur par défaut est $(VcpkgRoot)\installed\.

VcpkgApplocalDeps (Déployer localement des DLL)

Cette propriété active ou désactive la détection et la copie de DLL dépendantes de l’arborescence installée vcpkg vers le répertoire de sortie du projet.

VcpkgXUseBuiltInApplocalDeps (Utiliser un déploiement local intégré d’application)

Cette propriété, lorsqu’elle est activée, utilise l’implémentation de déploiement de DLL locale d’application intégrée de vcpkg lorsque l’application déploie des DLL localement. Cette propriété est supprimée et n’a aucun effet lorsque l’implémentation intégrée n’est plus expérimentale.

Cette propriété n’a aucun effet lorsqu’elle $(VcpkgApplocalDeps) a la valeur false.

Configuration du mode manifeste

Pour utiliser des manifestes (vcpkg.json) avec MSBuild, vous devez d’abord utiliser l’une des méthodes d’intégration ci-dessus. Ensuite, ajoutez une vcpkg.json au-dessus de votre fichier projet (par exemple, à la racine de votre référentiel source) et définissez la propriété VcpkgEnableManifesttruesur . Vous pouvez définir cette propriété via l’IDE dans Propriétés>du projet Vcpkg>Utiliser le manifeste Vcpkg. Vous devrez peut-être recharger l’IDE pour afficher la page de propriétés vcpkg.

vcpkg s’exécute pendant la génération de votre projet et installe toutes les dépendances répertoriées à vcpkg_installed/$(VcpkgTriplet)/ côté du vcpkg.json fichier . Ces bibliothèques seront ensuite automatiquement incluses et liées à vos projets MSBuild.

Problèmes connus

  • Visual Studio 2015 ne suit pas correctement les modifications apportées aux vcpkg.json fichiers et vcpkg-configuration.json ne répond pas aux modifications, sauf si une .cpp modification est effectuée.

VcpkgAdditionalInstallOptions (Options supplémentaires)

Lorsque vous utilisez un manifeste, cette option spécifie des indicateurs de ligne de commande supplémentaires à passer à l’appel de l’outil vcpkg sous-jacent. Cela peut être utilisé pour accéder aux fonctionnalités qui n’ont pas encore été exposées via une autre option.

VcpkgManifestInstall (Installer les dépendances Vcpkg)

Cette propriété peut être définie pour false désactiver la restauration automatique des dépendances pendant la génération du projet. Les dépendances doivent être restaurées manuellement via la ligne de commande vcpkg séparément.