Lernprogramm: Installieren einer bestimmten Version der Boost-Bibliotheken mithilfe von Registrierungsbaselines
Artikel
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:
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:
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:
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:
Installieren von Paketen mithilfe einer Manifestdatei
Installieren von Paketen für benutzerdefinierte Plattformen mithilfe von Triplets
Sperren der Versionen für wiederholbare Builds mithilfe der Versionsverwaltung
Verwalten Ihrer privaten Bibliotheken mithilfe benutzerdefinierter Registrierungen
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
Feedback zu vcpkg
vcpkg ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Hier erfahren Sie, wie Sie Sicherheitsbaselines für Ihre Azure-Dienste erstellen, indem Sie sicherstellen, dass Ihre Einstellungen die in CIS-Benchmarks für Azure 1.3.0 beschriebenen Mindestanforderungen erfüllen.