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:
- Geef de
--x-feature
-optie door aan de opdrachtvpckg install
. - Stel op CMake de
VCPKG_MANIFEST_FEATURES
in voordat de eerste aanroep naarproject()
. - Geef op MSBuild de optie
--x-feature
door via 'VcpkgAdditionalInstallOptions.
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:
- Voltooi de zelfstudie manifestmodus
- Lees de
vcpkg.json
envcpkg-configuration.json
naslagartikelen. - Vergrendeling van uw versies voor herhaalbare builds met versiebeheer