Auf Englisch lesen

Freigeben über


Lernprogramm: Installieren einer bestimmten Version der Boost-Bibliotheken mithilfe von Registrierungsbaselines

vcpkg bietet den Boost Satz von Bibliotheken als einzelne Pakete als Komfort für Benutzer, die nur von einer begrenzten Teilmenge von Boost-Paketen abhängen. Dieser Ansatz hat jedoch einen Kompromiss. Benutzer, die eine bestimmte Version ihrer Boost-Abhängigkeiten sperren möchten, müssen die Versionen der einzelnen Boost-Pakete außer Kraft setzen, von denen sie abhängen.

Es gibt jedoch eine einfache Lösung für dieses Problem mithilfe von Registrierungsbaselines und Paketmustern.

Voraussetzungen

  • Ein Terminal
  • einen C++-Compiler
  • vcpkg

Das Problem

Nehmen wir an, Sie haben ein Projekt, das davon boost-optional abhängt, und Sie möchten die Version 1.80.0 der Boost-Bibliotheken sperren. Sie erstellen also eine Außerkraftsetzung für Ihre Abhängigkeit wie unten gezeigt:

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

Wenn Sie ausgeführt werden vcpkg install, werden Sie feststellen, dass nur die Version gesperrt boost-optional wurde 1.80.0 , während die anderen Boost-Abhängigkeiten die Basisversion (1.83.0) verwenden.

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 – Abrufen des Basisplans der Boost-Version

Führen Sie den folgenden Befehl aus, um den Verlauf von Commits anzuzeigen, die die Versionsdatenbank für das boost-optional Paket geändert haben:

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

Eine ähnliche Ausgabe wie die folgende sollte angezeigt werden:

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)

Wie Sie sehen können, wird der Commit für die Version 1.80.0 aufgeführt. Im nächsten Schritt verwenden Sie diesen Commit als Basisplan für alle Boost-Pakete.

2 – Verwenden eines Basisplans zum Überschreiben von Boost-Paketen

Anstatt eine Außerkraftsetzung für alle zugehörigen Boost-Abhängigkeiten hinzuzufügen, können Sie stattdessen einen Registrierungsbasisplan verwenden, um den Versionssatz zu sperren. Ändern Sie Ihre vcpkg-configuration.json Datei wie unten dargestellt:

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

Die Konfigurationsdatei enthält zwei Registrierungsdefinitionen. Die default-registry , die auf die vcpkg kuratierte Registrierung verweist, um https://github.com/Microsoft/vcpkg den neuesten Commit zum Zeitpunkt des Schreibens dieses Artikels zu verwenden. Und eine zweite Registrierung, die auch auf die kuratierte vcpkg-Registrierung verweist, aber zu einem früheren Basisplan und auf Pakete beschränkt ist, die den und boost-* den boost* Mustern entsprechen.

Wenn Sie den vcpkg install Befehl ausführen, sollten Sie feststellen, dass diesmal alle Boost-Bibliotheken Version 1.80.0verwenden.

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.

Der gleiche Ansatz kann für andere Metapackagen wie qt.

Nächste Schritte

Hier sind einige zusätzliche Aufgaben, die Sie als Nächstes ausprobieren können: