Che cos'è la modalità manifesto?
vcpkg ha due modalità operative: la modalità classica e la modalità manifesto. Per la maggior parte degli utenti, è consigliabile usare la modalità manifesto.
La modalità manifesto usa file JSON dichiarativi per descrivere i metadati relativi al progetto o al pacchetto. I file manifesto devono avere il vcpkg.json
nome.
La modalità manifesto è attivata eseguendo il vcpkg install
comando mentre è presente un file manifesto (vcpkg.json
) nella directory di lavoro. Leggere in anticipo per informazioni dettagliate su come installare i pacchetti in modalità manifesto.
La modalità manifesto è necessaria anche per usare funzionalità avanzate come il controllo delle versioni e i registri personalizzati.
File manifesto nelle porte
Tutte le porte vcpkg devono includere un vcpkg.json
file che descrive i metadati relativi al pacchetto installato.
vcpkg usa i metadati nel manifesto del pacchetto per vari scopi, ad esempio, il calcolo degli alberi delle dipendenze, la ricerca di pacchetti in base al nome o alla descrizione, la risoluzione delle funzionalità e così via.
Esempio di manifesto del pacchetto
{
"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
}
]
}
File manifesto nei progetti
Lo scopo principale dell'uso di un file manifesto nel progetto consiste nel dichiarare le dipendenze. Quando si usa un manifesto del progetto, è possibile specificare vincoli di versione ed eseguire l'override per bloccare versioni specifiche delle dipendenze. Questa funzionalità non è disponibile in modalità classica.
Esempio di manifesto del progetto
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
File di configurazione
Vcpkg può essere configurato tramite un vcpkg-configuration.json
file per aggiungere più registri pacchetti o porte sovrapposte e percorsi triplicati.
File di configurazione di esempio
{
"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"
]
}
Installazione di pacchetti in modalità manifesto
Per installare i pacchetti usando un file manifesto, usare il vcpkg install
comando senza argomenti del pacchetto.
Il comando deve essere eseguito da una directory contenente un file manifesto (vcpkg.json
) o dal percorso di un file manifesto fornito tramite l'opzione --x-manifest-root=<path>
.
I pacchetti installati in modalità manifesto non verranno installati nella directory globale installed
perché in modalità classica. Ogni manifesto ottiene invece la propria directory di installazione denominata vcpkg_installed
. La vcpkg_installed
directory viene creata nella stessa directory che contiene il file manifesto.
La presenza di alberi di installazione indipendenti per manifesto consente la separazione delle dipendenze tra progetti diversi. Questo evita una limitazione cruciale della modalità classica, che consente l'installazione di una sola versione di ogni porta. La modalità manifesto mantiene le versioni delle porte separate per ogni progetto.
Uso delle funzionalità nei manifesti del progetto
I file manifesto possono definire set additivi di funzionalità, comportamento e dipendenze tramite l'uso di "funzionalità".
Nei progetti è possibile definire funzionalità per abilitare o disabilitare le dipendenze applicabili alle parti del progetto. Ad esempio, se il progetto contiene più componenti, è possibile mantenere le dipendenze comuni nell'elenco "dependencies"
, ma limitare alcuni altri ai rispettivi componenti.
Per abilitare le funzionalità del progetto, è possibile usare uno dei metodi seguenti:
- Passare l'opzione
--x-feature
alvpckg install
comando. - In CMake impostare
VCPKG_MANIFEST_FEATURES
prima della prima chiamata aproject()
. - In MSBuild passare l'opzione
--x-feature
tramite 'VcpkgAdditionalInstallOptions.
Esempio: Funzionalità nei manifesti del progetto
{
"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" ]
}
}
}
Per compilare solo le dipendenze del componente "client" eseguire:
vcpkg install --x-feature=client
Passaggi successivi
Ecco alcune attività da provare:
- Completare l'esercitazione sulla modalità manifesto
- Leggere e
vcpkg.json
vcpkg-configuration.json
articoli di riferimento. - Bloccare le versioni per le build ripetibili usando il controllo delle versioni