Freigeben über


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:

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: