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
, undgmock_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 .vcxproj
Projekte 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 vcpkg
befinden.
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.props
weitere 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.json
vcpkg-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.