Samouczek: instalowanie określonej wersji bibliotek Boost przy użyciu punktów odniesienia rejestru
Narzędzie vcpkg udostępnia Boost
zestaw bibliotek jako pojedynczych pakietów jako wygodę dla użytkowników, którzy zależą tylko od ograniczonego podzestawu pakietów Boost.
Jednak takie podejście ma kompromis. Użytkownicy, którzy chcą zablokować określoną wersję swoich zależności Boost, muszą zastąpić wersje każdego pakietu Boost, od których zależą.
Jednak istnieje proste rozwiązanie tego problemu przy użyciu planów bazowych rejestru i wzorców pakietów.
- Terminal
- Kompilator języka C++
- vcpkg
Załóżmy, że masz projekt, który zależy boost-optional
od i chcesz zablokować wersję 1.80.0
bibliotek Boost. Dlatego utworzysz przesłonięć dla zależności, jak pokazano poniżej:
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"
}
}
Po uruchomieniu vcpkg install
polecenia zauważysz, że tylko wersja elementu boost-optional
została zablokowana 1.80.0
, podczas gdy inne zależności Boost używają wersji punktu odniesienia (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.
Uruchom następujące polecenie, aby wyświetlić historię zatwierdzeń, które zmodyfikowały bazę danych wersji pakietu boost-optional
:
git log "--format=%H %cd %s" --date=short --left-only -- versions/b-/boost-optional.json
Powinny zostać wyświetlone dane wyjściowe podobne do następujących:
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)
Jak widać, zatwierdzenie wersji 1.80.0
jest wyświetlane. W następnym kroku użyjesz tego zatwierdzenia jako punktu odniesienia dla wszystkich pakietów Boost.
Zamiast dodawać przesłonięcia dla wszystkich powiązanych zależności boost, możesz użyć punktu odniesienia rejestru, aby zablokować zestaw wersji. Zmodyfikuj vcpkg-configuration.json
plik, jak pokazano poniżej:
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-*"]
}
]
}
Plik konfiguracji zawiera dwie definicje rejestru. Element default-registry
, który wskazuje na rejestr https://github.com/Microsoft/vcpkg wyselekcjonowanych vcpkg przy użyciu najnowszego zatwierdzenia w momencie pisania tego artykułu. Drugi rejestr, który wskazuje również na wyselekcjonowany rejestr vcpkg, ale w poprzednim punkcie odniesienia i jest ograniczony do pakietów, które pasują boost*
do wzorców i boost-*
.
Jeśli uruchomisz vcpkg install
polecenie, zwróć uwagę, że tym razem wszystkie biblioteki Boost używają wersji 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.
Tego samego podejścia można użyć w przypadku innych metapakietów, takich jak qt
.
Poniżej przedstawiono kilka dodatkowych zadań, które należy wykonać, aby spróbować wykonać następne czynności:
- Instalowanie pakietów przy użyciu pliku manifestu
- Instalowanie pakietów dla niestandardowych platform przy użyciu trypletów
- Blokowanie wersji dla powtarzalnych kompilacji przy użyciu przechowywania wersji
- Ponowne używanie plików binarnych w ramach przebiegów ciągłej integracji przy użyciu buforowania binarnego
- Zarządzanie bibliotekami prywatnymi przy użyciu rejestrów niestandardowych
Opinia o produkcie vcpkg
vcpkg to projekt typu open source. Wybierz link, aby przekazać opinię: