Partage via


Qu’est-ce que le mode manifeste ?

vcpkg a deux modes d’opération : le mode classique et le mode manifeste. Pour la plupart des utilisateurs, nous avons recomméré le mode manifeste.

Le mode manifeste utilise des fichiers JSON déclaratifs pour décrire les métadonnées relatives à votre projet ou package. Dans tous les cas, le nom de ce fichier est vcpkg.json.

Le mode manifeste est engagé en exécutant la vcpkg install commande pendant qu’il existe un fichier manifeste (vcpkg.json) dans le répertoire de travail. Pour plus d’informations sur l’installation des packages en mode manifeste, lisez-en plus.

Le mode manifeste est également nécessaire pour utiliser des fonctionnalités avancées telles que le contrôle de version et les registres personnalisés.

Fichiers manifestes dans les ports

Tous les ports vcpkg doivent inclure un vcpkg.json fichier qui décrit les métadonnées relatives au package qu’ils installent.

vcpkg utilise les métadonnées dans le manifeste de package à diverses fins, telles que le calcul des arborescences de dépendances, la recherche de packages par nom ou description, la résolution des fonctionnalités, etc.

Exemple de manifeste de package

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

Fichiers manifestes dans les projets

L’objectif principal de l’utilisation d’un fichier manifeste dans votre projet est de déclarer vos dépendances. Lorsque vous utilisez un manifeste de projet, vous pouvez spécifier des contraintes de version et des remplacements pour verrouiller des versions spécifiques de vos dépendances. Cette fonctionnalité n’est pas disponible en mode classique.

Exemple de manifeste de projet

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

Fichier de configuration

Vcpkg peut être configuré par le biais d’un vcpkg-configuration.json fichier pour ajouter d’autres registres de package ou des ports de superposition et des emplacements de triplets .

Exemple de fichier de configuration

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

Installation de packages en mode manifeste

Pour installer des packages à l’aide d’un fichier manifeste, vous utilisez la vcpkg install commande sans arguments de package. La commande doit être exécutée à partir d’un répertoire contenant un fichier manifeste (vcpkg.json) ou le chemin d’accès à un fichier manifeste fourni à l’aide de l’option --x-manifest-root=<path> .

Les packages installés en mode manifeste ne seront pas installés dans le répertoire global installed , car ils le font en mode classique. Au lieu de cela, chaque manifeste obtient son propre répertoire d’installation nommé vcpkg_installed; le vcpkg_installed répertoire est créé dans le même répertoire que celui qui contient le fichier manifeste.

L’utilisation d’arborescences d’installation indépendantes par manifeste permet la séparation des dépendances entre différents projets. Cela contourne une limitation cruciale du mode classique, qui autorise l’installation d’une seule version de chaque port. Le mode manifeste conserve les versions des ports séparés par projet.

Utilisation de fonctionnalités dans les manifestes de projet

Les fichiers manifestes peuvent définir des ensembles additifs de fonctionnalités, de comportement et de dépendances à l’aide de « fonctionnalités ».

Dans vos projets, vous pouvez définir des fonctionnalités permettant d’activer ou de désactiver les dépendances qui s’appliquent aux parties de votre projet. Par exemple, si votre projet contient plusieurs composants, vous pouvez conserver les dépendances courantes dans la "dependencies" liste, mais limiter d’autres à leurs composants respectifs.

Pour activer les fonctionnalités de votre projet, vous pouvez utiliser l’une des méthodes suivantes :

Exemple : Fonctionnalités dans les manifestes de projet

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

Pour générer uniquement les dépendances du composant « client » s’exécutent :

vcpkg install --x-feature=client

Étapes suivantes

Voici quelques tâches à effectuer à l’étape suivante :