vcpkg in MSBuild-Projekten

Integrationsmethoden

Benutzerweite Integration

Führen Sie den folgenden Befehl aus, um vcpkg in Ihren MSBuild-Projekten zu verwenden:

vcpkg integrate install

Sie müssen den vcpkg integrate install Befehl nur ausführen, wenn Sie die MSBuild-Integration zum ersten Mal aktivieren möchten. Dies ermöglicht die MSBuild-Integration für alle vorhandenen und zukünftigen Projekte.

Wenn Sie über mehrere Instanzen von vcpkg verfügen, können Sie den vcpkg integrate install Befehl verwenden, um zu aktualisieren, welche vcpkg-Instanz innerhalb von MSBuild verwendet wird. Wird verwendet vcpkg integrate remove , um die benutzerweite MSBuild-Integration zu entfernen.

Diese Integrationsmethode fügt automatisch vcpkg-installierte Pakete zu den folgenden Projekteigenschaften hinzu: Include Directories, LinkDirectories, and Link Libraries. Darüber hinaus wird eine Nachbuildaktion erstellt, die sicherstellt, dass alle erforderlichen DLLs in den Buildausgabeordner kopiert werden. Dies funktioniert für alle Lösungen und Projekte mit Visual Studio 2015 oder höher.

Dies ist alles, was Sie für die überwiegende Mehrheit der Bibliotheken tun müssen. Einige Bibliotheken führen jedoch widersprüchliche Verhaltensweisen aus, z. B. das Neudefinieren main(). Da Sie pro Projekt auswählen müssen, welche dieser in Konflikt stehenden Optionen angezeigt werden sollen, müssen Sie diese Bibliotheken manuell zu Ihren Linkereingaben hinzufügen.

Hier sind einige Beispiele, in denen manuelle Verknüpfungen erforderlich sind (keine vollständige Liste):

  • Gtest stellt gtest, gmock, gtest_main, und gmock_main
  • SDL2 bietet SDL2main
  • SFML bietet sfml-main
  • Boost.Test bietet boost_test_exec_monitor

Führen Sie zum Abrufen einer vollständigen Liste für alle installierten Pakete aus vcpkg owns manual-link.

Importieren .props und .targets

vcpkg kann auch in MSBuild-Projekte integriert werden, indem die scripts/buildsystems/vcpkg.props Dateien scripts/buildsystems/vcpkg.targets explizit in die einzelnen .vcxprojProjekte importiert werden. Durch die Verwendung relativer Pfade kann vcpkg von einem Untermodul genutzt und automatisch von Benutzern erworben werden, wenn sie ausgeführt werden git clone.

Die einfachste Möglichkeit, diese zu jedem Projekt in Ihrer Lösung hinzuzufügen, besteht darin, dateien im Stammverzeichnis Ihres Repositorys zu erstellen und Directory.Build.targets zu speichernDirectory.Build.props.

In den folgenden Beispielen wird davon ausgegangen, dass sie sich im Stammverzeichnis Ihres Repositorys mit einem Untermodul von microsoft/vcpkg at vcpkgbefinden.

Beispiel: Directory.Build.props

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

Beispiel: Directory.Build.targets

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

Weitere Informationen zu Directory.Build.targets und Directory.Build.propsweitere Informationen finden Sie im Abschnitt "Anpassen Ihres Build"-Abschnitts der offiziellen MSBuild-Dokumentation.

Verknüpftes NuGet-Paket

Hinweis

Dieser Ansatz wird für neue Projekte nicht empfohlen, da es ihnen schwierig macht, sie mit anderen zu teilen. Ein tragbares, eigenständiges NuGet-Paket finden Sie unter .export command

VS-Projekte können auch über ein NuGet-Paket integriert werden. Dadurch wird die Projektdatei geändert, daher wird dieser Ansatz für Open Source-Projekte nicht empfohlen.

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"

Hinweis

Das generierte NuGet-Paket enthält nicht die tatsächlichen Bibliotheken. Stattdessen verhält es sich wie eine Verknüpfung (oder symlink) zur vcpkg-Installation und aktualisiert automatisch mit änderungen (installieren/entfernen) auf die Bibliotheken. Sie müssen das NuGet-Paket nicht neu generieren oder aktualisieren.

Allgemeine Konfiguration

VcpkgEnabled (Verwenden von Vcpkg)

Dies kann auf "false" festgelegt werden, um die vcpkg-Integration für das Projekt explizit zu deaktivieren.

VcpkgConfiguration (Vcpkg-Konfiguration)

Wenn Ihre Konfigurationsnamen zu komplex sind, damit vcpkg richtig erraten wird, können Sie diese Eigenschaft Release zuweisen oder Debug explizit vcpkg mitteilen, welche Variante von Bibliotheken Sie verwenden möchten.

VcpkgEnableManifest (Verwenden des Vcpkg-Manifests)

Diese Eigenschaft muss so festgelegt true werden, dass sie von einer lokalen vcpkg.json Datei verwendet werden kann. Bei Festlegung auf false, werden lokale vcpkg.json Dateien ignoriert.

Dies ist derzeit standardmäßig auf false" , wird aber in Zukunft standardmäßig verwendet true .

VcpkgTriplet (Triplet)

Diese Eigenschaft steuert das Triplet, aus dem Bibliotheken verwendet werden sollen, z x64-windows-static . B. oder arm64-windows.

Wenn dies nicht explizit festgelegt ist, leitet vcpkg das richtige Triple basierend auf ihren Visual Studio-Einstellungen ab. vcpkg führt nur Triplets ab, die dynamische Bibliotheksverknüpfung und dynamische CRT-Verknüpfung verwenden; Wenn Sie statische Abhängigkeiten benötigen oder die statische CRT (/MT) verwenden möchten, müssen Sie das Triplet manuell festlegen.

Sie können das automatisch abgeleitete Triplet sehen, indem Sie Ihre MSBuild-Ausführlichkeit auf "Normal" oder höher festlegen:

Tastenkombination: STRG+Q "Erstellen und Ausführen"

Tools - Optionen ->> Projekte und Lösungen -> Erstellen und Ausführen -> MSBuild-Projekt-Build-Ausgabede verbosität

Siehe auch Dreifache

VcpkgHostTriplet (Host-Triplet)

Dies kann auf ein benutzerdefiniertes Triplet festgelegt werden, das zum Auflösen von Hostabhängigkeiten verwendet werden soll.

Wenn dies nicht festgelegt ist, wird dies standardmäßig auf das "native" Triplet (x64-Windows) festgelegt.

Siehe auch Hostabhängigkeiten.

VcpkgInstalledDir (Installiertes Verzeichnis)

Diese Eigenschaft definiert den Speicherort, von dem vcpkg Bibliotheken installiert und verwendet.

Im Manifestmodus wird diese Standardeinstellung auf $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\. Im klassischen Modus ist dies standardmäßig auf $(VcpkgRoot)\installed\.

VcpkgApplocalDeps (App-lokale Bereitstellung von DLLs)

Diese Eigenschaft aktiviert oder deaktiviert die Erkennung und Das Kopieren abhängiger DLLs aus der installierten vcpkg-Struktur in das Projektausgabeverzeichnis.

VcpkgXUseBuiltInApplocalDeps (Verwenden der integrierten app-lokalen Bereitstellung)

Diese Eigenschaft verwendet bei aktivierter Aktivierung die experimentelle integrierte Dll-Bereitstellungsimplementierung von vcpkg, wenn dlLs lokal von der App bereitgestellt werden. Diese Eigenschaft wird entfernt und hat keine Auswirkungen, wenn die integrierte Implementierung nicht mehr experimentell ist.

Diese Eigenschaft hat keine Auswirkung, wenn $(VcpkgApplocalDeps) "false" ist.

Manifestmoduskonfiguration

Um Manifeste (vcpkg.json) mit MSBuild zu verwenden, müssen Sie zuerst eine der oben genannten Integrationsmethoden verwenden. Fügen Sie dann eine vcpkg.json oberhalb der Projektdatei (z. B. im Stammverzeichnis Ihres Quell-Repositorys) hinzu, und legen Sie die Eigenschaft VcpkgEnableManifest auf true. Sie können diese Eigenschaft über die IDE in Project Properties>Vcpkg Verwenden des Vcpkg-Manifests> festlegen. Möglicherweise müssen Sie die IDE neu laden, um die vcpkg-Eigenschaftenseite anzuzeigen.

vcpkg wird während des Builds Ihres Projekts ausgeführt und alle aufgelisteten Abhängigkeiten an vcpkg_installed/$(VcpkgTriplet)/ angrenzender vcpkg.json Datei installiert. Diese Bibliotheken werden dann automatisch in Ihre MSBuild-Projekte einbezogen und verknüpft.

Bekannte Probleme

  • Visual Studio 2015 verfolgt Bearbeitungen vcpkg.jsonvcpkg-configuration.json und Dateien nicht ordnungsgemäß und reagiert nicht auf Änderungen, es sei denn, eine .cpp Bearbeitung erfolgt.

VcpkgAdditionalInstallOptions (Zusätzliche Optionen)

Bei Verwendung eines Manifests gibt diese Option zusätzliche Befehlszeilenkennzeichnungen an, die an den zugrunde liegenden vcpkg-Toolaufruf übergeben werden sollen. Dies kann verwendet werden, um auf Features zuzugreifen, die noch nicht über eine andere Option verfügbar gemacht wurden.

VcpkgManifestInstall (Installieren von Vcpkg-Abhängigkeiten)

Diese Eigenschaft kann so festgelegt werden, dass false die automatische Abhängigkeitswiederherstellung während des Projektbuilds deaktiviert wird. Abhängigkeiten müssen über die vcpkg-Befehlszeile separat manuell wiederhergestellt werden.