Che cos'è la modalità manifesto?

vcpkg ha due modalità operative: la modalità classica e la modalità manifesto. Per la maggior parte degli utenti, è stata avviata la modalità manifesto.

La modalità manifesto usa file JSON dichiarativi per descrivere i metadati relativi al progetto o al pacchetto. In ogni caso, il nome di questo file è vcpkg.json.

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/northwindtraders/vcpkg-registry",
      "baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
      "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:

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: