Dela via


Vad är manifestläge?

vcpkg har två åtgärdslägen: klassiskt läge och manifestläge. För de flesta användare rekommenderar vi manifestläge.

Manifestläget använder deklarativa JSON-filer för att beskriva metadata om projektet eller paketet. Manifestfiler måste ha vcpkg.json-namnet.

Manifestläget används genom att köra kommandot vcpkg install medan det finns en manifestfil (vcpkg.json) i arbetskatalogen. Läs vidare för detaljer om hur du installerar paket i manifestläge.

Manifestläget krävs också för att använda avancerade funktioner som versionshantering och anpassade register.

Manifestfiler i nätverksportar

Alla vcpkg-portar måste innehålla en vcpkg.json fil som beskriver metadata om paketet de installerar.

vcpkg använder metadata i paketmanifestet för olika syften, till exempel beräkning av beroendeträd, sökning efter paket efter namn eller beskrivning, matchning av funktioner osv.

Exempel på 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
    }
  ]
}

Manifestfiler i projekt

Huvudsyftet med att använda en manifestfil i projektet är att deklarera dina beroenden. När du använder ett projektmanifest kan du ange versionsbegränsningar och åsidosättningar för att låsa specifika versioner av dina beroenden. Den här funktionen är inte tillgänglig i klassiskt läge.

Exempel på projektmanifest

{
  "dependencies": [ "fmt", "zlib" ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "zlib", "version": "1.2.8" }
  ]
}

Konfigurationsfil

vcpkg kan konfigureras via en vcpkg-configuration.json-fil för att lägga till fler -paketregister eller -överläggsportar och triplet--platser.

Exempel på konfigurationsfil

{
  "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"
  ]
}

Installera paket i manifestläge

Om du vill installera paket med hjälp av en manifestfil använder du kommandot vcpkg install utan några paketargument. Kommandot måste köras från en katalog som innehåller en manifestfil (vcpkg.json) eller sökvägen till en manifestfil som tillhandahålls med hjälp av alternativet --x-manifest-root=<path>.

Paket som är installerade i manifestläge installeras inte i katalogen global installed som de gör i klassiskt läge. I stället får varje manifest en egen installationskatalog med namnet vcpkg_installed; vcpkg_installed-katalogen skapas i samma katalog som innehåller manifestfilen.

Med oberoende installationsträd per manifest kan beroenden skiljas mellan olika projekt. Detta kringgår en viktig begränsning i klassiskt läge, som endast tillåter att en version av varje port installeras. Manifestläget håller versioner av portar åtskilda per projekt.

Använda funktioner i projektmanifest

Manifestfiler kan definiera additiva uppsättningar med funktioner, beteende och beroenden med hjälp av "funktioner".

I dina projekt kan du definiera funktioner för att aktivera eller inaktivera beroenden som gäller för delar av projektet. Om projektet till exempel innehåller flera komponenter kanske du vill behålla vanliga beroenden i listan "dependencies" men begränsa vissa andra till sina respektive komponenter.

Om du vill aktivera funktioner i projektet kan du använda någon av följande metoder:

Exempel: Funktioner i projektmanifest

{
  "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" ]
    }
  }
}

För att bara bygga "klient"-komponentens beroenden, kör:

vcpkg install --x-feature=client

Nästa steg

Här är några uppgifter att prova härnäst: