Lire en anglais

Partager via


Tutoriel : Installer une version spécifique des bibliothèques Boost à l’aide des bases de référence du Registre

vcpkg fournit l’ensemble Boost de bibliothèques en tant que packages individuels comme commodité pour les utilisateurs qui dépendent uniquement d’un sous-ensemble limité de packages Boost. Toutefois, cette approche a un compromis. Les utilisateurs qui souhaitent verrouiller une version spécifique de leurs dépendances Boost sont tenus de remplacer les versions de chaque package Boost dont ils dépendent.

Toutefois, il existe une solution simple à ce problème à l’aide de bases de référence de Registre et de modèles de package.

Prérequis

  • Un terminal
  • Compilateur C++
  • vcpkg

La problématique

Supposons que vous disposez d’un projet qui dépend boost-optional et que vous souhaitez verrouiller la version 1.80.0 des bibliothèques Boost. Vous créez donc un remplacement pour votre dépendance, comme indiqué ci-dessous :

vcpkg.json

{
    "dependencies": [ "boost-optional" ],
    "overrides": [
        { "name": "boost-optional", "version": "1.80.0" }
    ]
}

vcpkg-configuration.json

{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/Microsoft/vcpkg",
    "baseline": "3265c187c74914aa5569b75355badebfdbab7987"
  }
}

Lorsque vous exécutez vcpkg install, vous remarquerez que seule la version d’a boost-optional été verrouillée 1.80.0 pendant que les autres dépendances Boost utilisent la version de référence (1.83.0).

Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
  * boost-assert:x64-linux -> 1.83.0
  * boost-config:x64-linux -> 1.83.0
  * boost-core:x64-linux -> 1.83.0
  * boost-detail:x64-linux -> 1.83.0
  * boost-io:x64-linux -> 1.83.0
  * boost-move:x64-linux -> 1.83.0
    boost-optional:x64-linux -> 1.80.0
  * boost-predef:x64-linux -> 1.83.0
  * boost-preprocessor:x64-linux -> 1.83.0
  * boost-static-assert:x64-linux -> 1.83.0
  * boost-throw-exception:x64-linux -> 1.83.0
  * boost-type-traits:x64-linux -> 1.83.0
  * boost-uninstall:x64-linux -> 1.83.0
  * boost-utility:x64-linux -> 1.83.0
  * boost-vcpkg-helpers:x64-linux -> 1.83.0
Additional packages (*) will be modified to complete this operation.

1 - Obtention de la ligne de base de version Boost

Exécutez la commande suivante pour afficher l’historique des validations qui ont modifié la base de données de version du boost-optional package :

git log "--format=%H %cd %s" --date=short --left-only -- versions/b-/boost-optional.json

La sortie doit ressembler à celle-ci :

caa7579a1c48e2ca770f6ccf98cb03db95642631 2023-09-13 [boost] update to v1.83.0 (#33597)
5d3798ac7388ca66c169773e46103b14077b76a4 2023-06-06 [boost] Remove port version constraints (#31572)
501db0f17ef6df184fcdbfbe0f87cde2313b6ab1 2023-04-15 [boost-build] Fix SHA512 and add MSVC workaround. (#30884)
bedfdb774cfbe47da202169046ca15441a213f3e 2023-04-15 [Boost] Update Boost ports to 1.82#0 (#30856)
9484a57dd560b89f0a583be08af6753611c57fd5 2023-02-24 Update vcpkg-tool to 2023-02-16. (#29664)
6aa38234d08efefc55b70025cf6afc2212e78e15 2023-02-01 [boost] Fix generate ports to match the tree. (#29338)
6d41737729b170cb7d323a4fddd21607c9237636 2022-12-20 [boost] update to 1.81.0 (#28356)
5ba2b95aea2a39aa89444949c7a047af38c401c1 2022-10-18 [boost] Add version constraints (#26817)
8424da584e59e05956913bf96f87654aa3096c7e 2022-08-25 [boost] update to 1.80.0 (#26233)
96ec7fb25da25e0463446e552d59715a47c95e73 2022-04-21 [boost] update to 1.79.0 (#24210)
76d4836f3b1e027758044fdbdde91256b0f0955d 2022-01-10 [boost] update to 1.78.0 (#21928)
cc471dc0f59b7b2066d6172c2893419412327a7a 2021-09-27 [boost] update to 1.77.0 (#19556)
761c81d43335a5d5ccc2ec8ad90bd7e2cbba734e 2021-07-07 [boost] update to 1.76.0 (#17335)
68a74950d0400f5a803026d0860f49853984bf11 2021-01-21 [vcpkg] Rename `port_versions` to `versions` (#15784)

Comme vous pouvez le voir, la validation pour la version 1.80.0 est répertoriée. À l’étape suivante, vous allez utiliser cette validation comme base de référence pour tous les packages Boost.

2 - Utiliser une ligne de base pour remplacer les packages Boost

Au lieu d’ajouter un remplacement pour toutes les dépendances Boost associées, vous pouvez utiliser une base de référence de Registre pour verrouiller le jeu de versions à la place. Modifiez votre vcpkg-configuration.json fichier comme indiqué ci-dessous :

vcpkg-configuration.json

{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/Microsoft/vcpkg",
    "baseline": "3265c187c74914aa5569b75355badebfdbab7987"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/Microsoft/vcpkg",
      "baseline": "8424da584e59e05956913bf96f87654aa3096c7e",
      "packages": [ "boost*", "boost-*"]
    }
  ]
}

Le fichier de configuration comprend deux définitions de Registre. Qui default-registry pointe vers le registre organisé vcpkg à https://github.com/Microsoft/vcpkg l’aide de la dernière validation au moment de l’écriture de cet article. Et un deuxième registre qui pointe également vers le registre organisé vcpkg, mais à une base de référence précédente et est limité aux packages qui correspondent aux modèles et boost-* aux boost* modèles.

Si vous exécutez la vcpkg install commande, vous devez remarquer que cette fois-ci, toutes les bibliothèques Boost utilisent la version 1.80.0.

Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
  * boost-assert:x64-linux -> 1.80.0
  * boost-config:x64-linux -> 1.80.0
  * boost-core:x64-linux -> 1.80.0
  * boost-detail:x64-linux -> 1.80.0
  * boost-io:x64-linux -> 1.80.0
  * boost-move:x64-linux -> 1.80.0
    boost-optional:x64-linux -> 1.80.0
  * boost-predef:x64-linux -> 1.80.0
  * boost-preprocessor:x64-linux -> 1.80.0
  * boost-static-assert:x64-linux -> 1.80.0
  * boost-throw-exception:x64-linux -> 1.80.0
  * boost-type-traits:x64-linux -> 1.80.0
  * boost-uninstall:x64-linux -> 1.80.0
  * boost-utility:x64-linux -> 1.80.0
  * boost-vcpkg-helpers:x64-linux -> 1.80.0
  * boost-winapi:x64-linux -> 1.80.0
Additional packages (*) will be modified to complete this operation.

La même approche peut être utilisée pour d’autres métapackages comme qt.

Étapes suivantes

Voici quelques tâches supplémentaires à essayer ensuite :