Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
Warunki 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%
ścieżką instalacji programu 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
Podstawa wersji określa minimalną wymaganą wersję dla wszystkich pakietów. Przeczytaj pojęcia dotyczące narzędzia vcpkg, aby dowiedzieć się o podstawach.
Aby uzyskać dokładne wersje używane w poprzednim kroku, zmodyfikuj zawartość vcpkg.json
na:
{
"dependencies": [
"fmt",
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Ustawienie builtin-baseline
do określonego SHA zatwierdzenia w repozytorium vcpkg poleca vcpkg użycie wersji pakietów z tego konkretnego zatwierdzenia 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
Punkty odniesienia zapewniają 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
na bieżący commit Git instancji vcpkg.
Możesz użyć opcji --add-initial-baseline
, aby dodać builtin-baseline
do manifestu, który jeszcze go nie ma.
4 — Dodawanie ograniczenia minimalnej wersji
Ustawienia bazowe nie są jedynym sposobem zablokowania wersji pakietu. Program vcpkg akceptuje również minimalne ograniczenia wersji w postaci version>=
.
Zmodyfikuj zawartość 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 wersji minimalnej (version>=
) na fmt
. Aby spełnić wymagania zależności, vcpkg musi spełnić dwa ograniczenia, jeden pochodzący z punktu odniesienia i jeden pochodzący z ograniczenia wersji minimalnej na liście dependencies
.
- Ograniczenie linii bazowej,
"version>=": "7.1.3"
. - Ograniczenie listy zależności
"version>=": "10.1.1"
.
Skompiluj i uruchom projekt, zastąp %VCPKG_ROOT%
ścieżką instalacji programu 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ć następująco:
fmt version is 100100
zlib version is 1.2.11
W tym przypadku wersja 10.1.1
fmt
spełnia oba ograniczenia. Zwróć uwagę, że zlib
otrzymuje swoją wersję bazową 1.2.11
.
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ż wersja bazowa.
- Aby zablokować wersje, które w przeciwnym razie są nieporównywalne, na przykład:
vista
,xp
.
Narzędzie vcpkg umożliwia rozwiązanie tych problemów przy użyciu przesłonięć wersji.
Zmodyfikuj zawartość vcpkg.json
na:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{
"name": "zlib",
"version": "1.2.8"
}
]
}
Każdy pakiet uwzględniony na liście "overrides"
będzie używać określonej wersji, ignorując wszystkie inne ograniczenia wersji. W tym przykładzie baza odniesienia 3426db05b996481ca31e95fff3734cf23e0f51bc
dodaje ograniczenie minimalnej wersji 1.2.11
dla zlib
, ale deklaracja zastąpienia wymusza zamiast tego wersję 1.2.8
.
Skompiluj i uruchom projekt, zastąp %VCPKG_ROOT%
ścieżką instalacji programu 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ć następująco:
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. Aby dowiedzieć się więcej na temat sposobu, w jaki narzędzie vcpkg obsługuje rozwiązywanie wersji, przeczytaj pojęcia dotyczące wersjonowania i oraz odniesienia i.
Poniżej przedstawiono kilka dodatkowych zadań, które należy wykonać, aby spróbować wykonać następne czynności:
- Powtórne użycie plików binarnych w ramach procesów ciągłej integracji przy użyciu buforowania binarnego
- Zarządzaj bibliotekami prywatnymi przy użyciu rejestrów niestandardowych