Delen via


Wat is de manifestmodus?

vcpkg heeft twee bewerkingsmodi: klassieke modus en manifestmodus. Voor de meeste gebruikers raden we de manifestmodus aan.

De manifestmodus maakt gebruik van declaratieve JSON-bestanden om metagegevens over uw project of pakket te beschrijven. Manifestbestanden moeten de naam vcpkg.json hebben.

De manifestmodus wordt ingeschakeld door de opdracht vcpkg install uit te voeren terwijl er een manifestbestand (vcpkg.json) in de werkmap staat. Lees verder voor meer informatie over het installeren van pakketten in de manifestmodus.

Manifestmodus is ook vereist voor het gebruik van geavanceerde functies zoals versiebeheer en aangepaste registers.

Manifestbestanden in netwerkpoorten

Alle vcpkg-poorten moeten een vcpkg.json-bestand bevatten waarin metagegevens worden beschreven over het pakket dat ze installeren.

vcpkg gebruikt de metagegevens in het pakketmanifest voor verschillende doeleinden, zoals het berekenen van afhankelijkheidsstructuren, het zoeken naar pakketten op naam of beschrijving, het omzetten van functies, enzovoort.

Voorbeeld van pakketmanifest

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

Manifestbestanden in projecten

Het belangrijkste doel van het gebruik van een manifestbestand in uw project is het declareren van uw afhankelijkheden. Wanneer u een projectmanifest gebruikt, kunt u versiebeperkingen en onderdrukkingen opgeven om specifieke versies van uw afhankelijkheden te vergrendelen. Deze functie is niet beschikbaar in de klassieke modus.

Voorbeeld van projectmanifest

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

Configuratiebestand

vcpkg kan worden geconfigureerd via een vcpkg-configuration.json-bestand om meer pakketregisters toe te voegen of overlaypoorten en drietallen locaties toe te voegen.

Voorbeeld van configuratiebestand

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

Pakketten installeren in manifestmodus

Als u pakketten wilt installeren met behulp van een manifestbestand, gebruikt u de opdracht vcpkg install zonder pakketargumenten. De opdracht moet worden uitgevoerd vanuit een map met een manifestbestand (vcpkg.json) of het pad naar een manifestbestand dat is opgegeven met behulp van de optie --x-manifest-root=<path>.

Pakketten die zijn geïnstalleerd in de manifestmodus, worden niet geïnstalleerd in de algemene installed map, net zoals in de klassieke modus. In plaats daarvan krijgt elk manifest een eigen installatiemap met de naam vcpkg_installed; de vcpkg_installed map wordt gemaakt in dezelfde map die het manifestbestand bevat.

Door onafhankelijke installatiestructuren per manifest te hebben, kunnen afhankelijkheden tussen verschillende projecten worden gescheiden. Dit omzeilt een cruciale beperking van de klassieke modus, waardoor slechts één versie van elke poort kan worden geïnstalleerd. In de manifestmodus blijven versies van poorten gescheiden per project.

Functies gebruiken in projectmanifesten

Manifestbestanden kunnen additieve sets functionaliteit, gedrag en afhankelijkheden definiëren door gebruik te maken van 'functies'.

In uw projecten kunt u functies definiëren om afhankelijkheden in of uit te schakelen die van toepassing zijn op onderdelen van uw project. Als uw project bijvoorbeeld meerdere onderdelen bevat, kunt u algemene afhankelijkheden in de "dependencies" lijst behouden, maar sommige andere onderdelen beperken tot hun respectieve onderdelen.

Als u functies van uw project wilt inschakelen, kunt u een van de volgende methoden gebruiken:

Voorbeeld: Functies in projectmanifesten

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

Als u alleen de afhankelijkheden van het clientonderdeel wilt bouwen, voert u het volgende uit:

vcpkg install --x-feature=client

Volgende stappen

Hier volgen enkele taken om het volgende te proberen: