Kurz: Instalace konkrétní verze balíčku
Důležitý
Tato funkce je dostupná pouze v režimu manifestu.
Vcpkg umožňuje řídit přesné verze jednotlivých závislostí v projektu.
V tomto kurzu se naučíte:
Požadavky
- Terminál
- Editor kódu
- vcpkg
- CMake
1. Vytvoření projektu s manifestem
V prázdné složce vytvořte následující soubory projektu:
Zdrojový soubor (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;
}
Soubor 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" ]
}
Sestavte projekt a nahraďte %VCPKG_ROOT%
instalační cestou vcpkg:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
Spusťte program:
fmt version is 70103
zlib version is 1.2.11
Je pravděpodobné, že když spustíte program, verze těchto knihoven se liší od výstupu výše. V dalším kroku vám ukážeme, jak uzamknout verze těchto závislostí, aby byly konzistentní při každém sestavení projektu.
2. Přidejte omezení verzí pomocí výchozí hodnoty
Směrný plán verze stanoví minimální úroveň verze pro všechny balíčky. Přečtěte si koncepty vcpkg, abyste se dozvěděli o základních liniích.
Pokud chcete získat přesné verze použité v předchozím kroku, upravte obsah vcpkg.json
na:
{
"dependencies": [
"fmt",
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Nastavení builtin-baseline
na konkrétní commit SHA úložiště vcpkg dává vcpkg pokyn, aby používal verze balíčků z tohoto konkrétního potvrzení jako minimální verze pro všechny balíčky.
Pomocí Gitu můžete prozkoumat verze pro konkrétní směrný plán:
git show 3426db05b996481ca31e95fff3734cf23e0f51bc:versions/baseline.json | Select-String -Pattern '"zlib"|"fmt"' -Context 0,3
Výstup by měl vypadat nějak takto:
"fmt": {
"baseline": "7.1.3",
"port-version": 1
},
--
"zlib": {
"baseline": "1.2.11",
"port-version": 9
},
3. Aktualizace standardních verzí
Standardní hodnoty nabízejí pohodlný mechanismus pro aktualizaci verzí všech závislostí najednou. Pokud chcete aktualizovat základní hodnoty, spusťte následující příkaz:
vcpkg x-update-baseline
Příkaz x-update-baseline
upraví soubor manifestu tak, aby nastavil builtin-baseline
na aktuální potvrzení Gitu vaší instance vcpkg.
Možnost --add-initial-baseline
můžete použít k přidání builtin-baseline
do manifestu, který ho ještě nemá.
4. Přidání omezení minimální verze
Standardní hodnoty nejsou jediným způsobem, jak uzamknout verzi balíčku. vcpkg také přijímá minimální omezení verze ve formě version>=
.
Upravte obsah vcpkg.json
na:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Výše uvedený soubor manifestu používá notaci objektu závislosti k nastavení požadavku minimální verze (version>=
) na fmt
. Aby vcpkg mohl splnit závislosti, je nutné splnit dvě omezení: jedno pocházející ze základní linie a druhé z omezení minimální verze v seznamu dependencies
.
- Omezení základní linie,
"version>=": "7.1.3"
. - Omezení seznamu závislostí,
"version>=": "10.1.1"
.
Sestavte a spusťte projekt, nahraďte %VCPKG_ROOT%
instalační cestou vcpkg:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Výstup by měl vypadat takto:
fmt version is 100100
zlib version is 1.2.11
V tomto případě verze 10.1.1
pro fmt
splňuje obě omezení. Všimněte si, jak zlib
získá základní verzi 1.2.11
.
5. Vynucení konkrétní verze
V některých případech můžete chtít vynutit konkrétní verzi balíčku, například:
- Pokud chcete vyřešit konflikty verzí.
- Uzamčení verzí starších než standardních hodnot
- Uzamčení verzí, které jsou jinak nesrovnatelné, například:
vista
,xp
.
S vcpkg můžete tyto problémy vyřešit pomocí předefinování verzí.
Upravte obsah vcpkg.json
na:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{
"name": "zlib",
"version": "1.2.8"
}
]
}
Všechny balíčky zahrnuté v seznamu "overrides"
budou používat zadanou verzi a zároveň budou ignorovat všechna ostatní omezení verzí. V tomto příkladu základní omezení 3426db05b996481ca31e95fff3734cf23e0f51bc
přidává omezení minimální verze na zlib
z 1.2.11
, ale deklarace přepsání přinutí použít verzi 1.2.8
.
Sestavte a spusťte projekt, nahraďte %VCPKG_ROOT%
instalační cestou vcpkg:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Výstup by měl vypadat takto:
fmt version is 100100
zlib version is 1.2.8
Další kroky
V tomto kurzu jste se seznámili s různými mechanismy, které vcpkg nabízí k uzamčení konkrétních verzí balíčků. Přečtěte si koncepty správy verzí a referenční, kde najdete další informace o tom, jak vcpkg zpracovává řešení verzí.
Tady je několik dalších úkolů, které můžete vyzkoušet:
- Opakované použití binárních souborů při spuštěních kontinuální integrace díky využití binární mezipaměti
- Správa privátních knihoven pomocí vlastních registrů