Samouczek: instalowanie określonej wersji pakietu
Ważne
Ta funkcja jest dostępna tylko w trybie manifestu.
Narzędzie vcpkg umożliwia kontrolowanie dokładnych wersji każdej zależności w projekcie.
Z tego samouczka dowiesz się, jak wykonywać następujące elementy:
Wymagania wstępne
- Terminal
- Edytor kodu
- vcpkg
- CMake
1 — Tworzenie projektu za pomocą manifestu
W pustym folderze utwórz następujące pliki projektu:
Plik źródłowy (main.cpp
):
#include <fmt/core.h>
#include <zlib.h>
int main()
{
fmt::print("fmt version is {}\n"
"zlib version is {}\n",
FMT_VERSION, ZLIB_VERSION);
return 0;
}
Plik projektu CMake (CMakeLists.txt
):
cmake_minimum_required(VERSION 3.18)
project(versionstest CXX)
add_executable(main main.cpp)
find_package(ZLIB REQUIRED)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB fmt::fmt)
Manifest vcpkg (vcpkg.json
):
{
"dependencies": [ "fmt", "zlib" ]
}
Skompiluj projekt, zastąp %VCPKG_ROOT%
ciąg ścieżką instalacji narzędzia vcpkg:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
Uruchom program:
fmt version is 70103
zlib version is 1.2.11
Prawdopodobnie po uruchomieniu programu wersje tych bibliotek różnią się od powyższych danych wyjściowych. W następnym kroku pokażemy, jak zablokować wersje tych zależności, aby były spójne za każdym razem, gdy kompilujesz projekt.
2 — Dodawanie ograniczeń wersji przy użyciu punktu odniesienia
Punkt odniesienia wersji ustanawia minimalną podłogę wersji dla wszystkich pakietów. Zapoznaj się z pojęciami dotyczącymi narzędzia vcpkg, aby dowiedzieć się więcej o punktach odniesienia.
Aby uzyskać dokładne wersje używane w poprzednim kroku, zmodyfikuj zawartość vcpkg.json
elementu na:
{
"dependencies": [
"fmt",
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Ustawienie builtin-baseline
określonego zatwierdzenia SHA repozytorium vcpkg instruuje vcpkg do używania wersji pakietu w tym konkretnym zatwierdzeniu jako minimalnej wersji dla wszystkich pakietów.
Za pomocą usługi Git można sprawdzić wersje dla tego konkretnego punktu odniesienia:
git show 3426db05b996481ca31e95fff3734cf23e0f51bc:versions/baseline.json | Select-String -Pattern '"zlib"|"fmt"' -Context 0,3
Dane wyjściowe powinny wyglądać mniej więcej tak:
"fmt": {
"baseline": "7.1.3",
"port-version": 1
},
--
"zlib": {
"baseline": "1.2.11",
"port-version": 9
},
3 — Aktualizowanie wersji punktu odniesienia
Linie bazowe oferują wygodny mechanizm aktualizacji wersji wszystkich zależności jednocześnie. Aby zaktualizować punkt odniesienia, uruchom następujące polecenie:
vcpkg x-update-baseline
Polecenie x-update-baseline
modyfikuje plik manifestu, aby ustawić builtin-baseline
bieżące zatwierdzenie usługi Git wystąpienia programu vcpkg.
Możesz użyć --add-initial-baseline
opcji , aby dodać element builtin-baseline
do manifestu, który jeszcze go nie ma.
4 — Dodawanie ograniczenia minimalnej wersji
Punkty odniesienia nie są jedynym sposobem zablokowania wersji pakietu. Narzędzie vcpkg akceptuje również minimalne ograniczenia wersji w postaci version>=
.
Zmodyfikuj zawartość elementu vcpkg.json
na:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Powyższy plik manifestu używa notacji obiektu zależności, aby ustawić ograniczenie minimalnej wersji (version>=
) na .fmt
Aby spełnić wymagania zależności, vcpkg musi spełniać dwa ograniczenia, jeden pochodzący z punktu odniesienia i jeden pochodzący z ograniczenia wersji minimalnej na dependencies
liście.
- Ograniczenie linii bazowej,
"version>=": "7.1.3"
. - Ograniczenie listy zależności,
"version>=": "10.1.1"
.
Skompiluj i uruchom projekt, zastąp ciąg %VCPKG_ROOT%
ścieżką instalacji narzędzia vcpkg:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Dane wyjściowe powinny wyglądać podobnie do poniższych:
fmt version is 100100
zlib version is 1.2.11
W takim przypadku wersja 10.1.1
fmt
elementu spełnia oba ograniczenia. Zwróć uwagę, jak zlib
pobiera wersję 1.2.11
punktu odniesienia .
5 — Wymuszanie określonej wersji
W niektórych przypadkach możesz wymusić określoną wersję pakietu, na przykład:
- Aby rozwiązać konflikty wersji.
- Aby zablokować wersje starsze niż punkt odniesienia.
- Aby zablokować wersje, które w przeciwnym razie są niekomputeralne, na przykład:
vista
,xp
.
Narzędzie vcpkg umożliwia rozwiązanie tych problemów przy użyciu przesłonięć wersji.
Zmodyfikuj zawartość na vcpkg.json
:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{
"name": "zlib",
"version": "1.2.8"
}
]
}
Każdy pakiet uwzględniony na "overrides"
liście będzie używać określonej wersji, ignorując wszystkie inne ograniczenia wersji. W tym przykładzie punkt odniesienia 3426db05b996481ca31e95fff3734cf23e0f51bc
dodaje ograniczenie minimalnej wersji, zlib
1.2.11
ale zamiast tego deklaracja zastąpienia wymusza wersję 1.2.8
.
Skompiluj i uruchom projekt, zastąp ciąg %VCPKG_ROOT%
ścieżką instalacji narzędzia vcpkg:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Dane wyjściowe powinny wyglądać podobnie do poniższych:
fmt version is 100100
zlib version is 1.2.8
Następne kroki
W tym samouczku przedstawiono różne mechanizmy, które oferuje vcpkg, aby zablokować określone wersje pakietów. Zapoznaj się z pojęciami dotyczącymi przechowywania wersji i dokumentacją, aby dowiedzieć się więcej na temat sposobu obsługi rozpoznawania wersji przez narzędzie vcpkg.
Poniżej przedstawiono kilka dodatkowych zadań, które należy wykonać, aby spróbować wykonać następne czynności:
- 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