Was ist der Manifestmodus?
vcpkg verfügt über zwei Betriebsmodi: klassischen Modus und Manifestmodus. Für die meisten Benutzer empfehlen wir den Manifestmodus.
Im Manifestmodus werden deklarative JSON-Dateien verwendet, um Metadaten zu Ihrem Projekt oder Paket zu beschreiben. Manifestdateien sind erforderlich, damit der Name vorhanden vcpkg.json
ist.
Der Manifestmodus wird verwendet, indem der vcpkg install
Befehl ausgeführt wird, während eine Manifestdatei (vcpkg.json
) im Arbeitsverzeichnis vorhanden ist. Weitere Informationen zum Installieren von Paketen im Manifestmodus finden Sie weiter.
Der Manifestmodus ist auch erforderlich, um erweiterte Features wie Versionsverwaltung und benutzerdefinierte Registrierungen zu verwenden.
Manifestdateien in Ports
Alle vcpkg-Ports müssen eine vcpkg.json
Datei enthalten, die Metadaten zum installierten Paket beschreibt.
vcpkg verwendet die Metadaten im Paketmanifest für verschiedene Zwecke, z. B. berechnen Abhängigkeitsstrukturen, Suchen nach Paketen nach Name oder Beschreibung, Auflösen von Features usw.
Beispiel für das Paketmanifest
{
"name": "fmt",
"version": "10.1.1",
"description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
"homepage": "https://github.com/fmtlib/fmt",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
Manifestdateien in Projekten
Der Hauptzweck der Verwendung einer Manifestdatei in Ihrem Projekt besteht darin, Ihre Abhängigkeiten zu deklarieren. Wenn Sie ein Projektmanifest verwenden, können Sie Versionsbeschränkungen und Außerkraftsetzungen angeben, um bestimmte Versionen Ihrer Abhängigkeiten zu sperren. Dieses Feature ist im klassischen Modus nicht verfügbar.
Beispiel für das Project-Manifest
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
Konfigurationsdatei
vcpkg kann über eine vcpkg-configuration.json
Datei konfiguriert werden, um weitere Paketregistrierungen oder Overlayports und Triplets-Speicherorte hinzuzufügen.
Beispielkonfigurationsdatei
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
Installieren von Paketen im Manifestmodus
Um Pakete mit einer Manifestdatei zu installieren, verwenden Sie den vcpkg install
Befehl ohne Paketargumente.
Der Befehl muss aus einem Verzeichnis ausgeführt werden, das eine Manifestdatei (vcpkg.json
) enthält, oder den Pfad zu einer Manifestdatei, die mithilfe der --x-manifest-root=<path>
Option bereitgestellt wird.
Pakete, die im Manifestmodus installiert sind, werden nicht im globalen installed
Verzeichnis installiert, wie sie im klassischen Modus ausgeführt werden. Stattdessen erhält jedes Manifest ein eigenes Installationsverzeichnis namens vcpkg_installed
; das vcpkg_installed
Verzeichnis wird im selben Verzeichnis erstellt, das die Manifestdatei enthält.
Die Verwendung unabhängiger Installationsstrukturen pro Manifest ermöglicht die Trennung von Abhängigkeiten zwischen verschiedenen Projekten. Dadurch wird eine entscheidende Einschränkung des klassischen Modus umgangen, wodurch nur eine Version jedes Ports installiert werden kann. Im Manifestmodus werden Versionen von Ports pro Projekt getrennt.
Verwenden von Features in Projektmanifesten
Manifestdateien können durch die Verwendung von "Features" additive Gruppen von Funktionen, Verhalten und Abhängigkeiten definieren.
In Ihren Projekten können Sie Features definieren, um Abhängigkeiten zu aktivieren oder zu deaktivieren, die für Teile Ihres Projekts gelten. Wenn Ihr Projekt z. B. mehrere Komponenten enthält, sollten Sie allgemeine Abhängigkeiten in der "dependencies"
Liste beibehalten, einige andere jedoch auf ihre jeweiligen Komponenten beschränken.
Um Features Ihres Projekts zu aktivieren, können Sie eine der folgenden Methoden verwenden:
- Übergeben Sie die
--x-feature
Option an Ihrenvpckg install
Befehl. - Legen Sie auf CMake den
VCPKG_MANIFEST_FEATURES
vor dem ersten Aufruf aufproject()
. - Übergeben Sie auf MSBuild die Option über 'VcpkgAdditionalInstallOptions.On MSBuild, pass the
--x-feature
option via 'VcpkgAdditionalInstallOptions.
Beispiel: Features in Projektmanifesten
{
"name": "my-game",
"dependencies": [ "grpc" ],
"features": {
"client": {
"description": "client game executable",
"dependencies": [ "sdl2", "bullet3" ]
},
"server": {
"description": "multiplayer server executable",
"dependencies": [ "proxygen" ]
},
"tests": {
"description": "development tests",
"dependencies": [ "gtest" ]
}
}
}
Gehen Sie wie folgt vor, um nur die Abhängigkeiten der "Clientkomponente" zu erstellen:
vcpkg install --x-feature=client
Nächste Schritte
Hier sind einige Aufgaben, die Sie als Nächstes ausprobieren können:
- Führen Sie das Lernprogramm für den Manifestmodus aus.
vcpkg.json
Lesen undvcpkg-configuration.json
Referenzartikel.- Sperren der Versionen für wiederholbare Builds mithilfe der Versionsverwaltung