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:
- Skicka alternativet
--x-feature
till kommandotvpckg install
. - I CMake anger du
VCPKG_MANIFEST_FEATURES
före det första anropet tillproject()
. - På MSBuild skickar du alternativet
--x-feature
via 'VcpkgAdditionalInstallOptions.
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:
- Slutför självstudien för manifestläge
- Läs
vcpkg.json
ochvcpkg-configuration.json
referensartiklar. - Lås ner dina versioner för repeterbara byggen med versionshantering