Öğretici: Paketin belirli bir sürümünü yükleme
vcpkg, projenizdeki her bağımlılığın kesin sürümlerini denetlemenize olanak tanır.
Bu öğreticide şunları öğreneceksiniz:
- Bildirim ile proje oluşturma
- Temel kullanarak sürüm kısıtlamaları ekleme
- Temel sürümleri güncelleştirme
- En düşük sürüm kısıtlaması ekleme
- Belirli bir sürümü zorlama
Önkoşullar
- Bir terminal
- Kod düzenleyicisi
- vcpkg
- CMake
1 - Bildirim içeren proje oluşturma
Boş bir klasörde aşağıdaki proje dosyalarını oluşturun:
Kaynak dosya (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;
}
CMake proje dosyası (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)
Bir vcpkg manifestosu (vcpkg.json
):
{
"dependencies": [ "fmt", "zlib" ]
}
Projeyi oluşturun, %VCPKG_ROOT%
vcpkg yükleme yolunuzla değiştirin:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
Programı çalıştırın:
fmt version is 70103
zlib version is 1.2.11
Büyük olasılıkla, programı çalıştırdığınızda bu kitaplıkların sürümleri yukarıdaki çıkıştan farklıdır. Sonraki adımda, projeyi her derlediğinizde tutarlı kalmaları için bu bağımlılıkların sürümlerinin nasıl kilitlendiğini göstereceğiz.
2 - Taban çizgisi kullanarak sürüm kısıtlamaları ekleme
Sürüm temeli, tüm paketler için en düşük sürüm katı oluşturur. Temeller hakkında bilgi edinmek için vcpkg kavramlarını okuyun.
Önceki adımda kullanılan tam sürümleri almak için vcpkg.json
içeriğini şu şekilde değiştirin:
{
"dependencies": [
"fmt",
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
builtin-baseline
vcpkg deposunun belirli bir işleme SHA'sına ayarlanması, vcpkg'ye bu işlemedeki paket sürümlerini tüm paketler için en düşük sürüm olarak kullanmasını bildirir.
Belirli bir taban çizgisinin sürümlerini incelemek için Git'i kullanabilirsiniz:
git show 3426db05b996481ca31e95fff3734cf23e0f51bc:versions/baseline.json | Select-String -Pattern '"zlib"|"fmt"' -Context 0,3
Çıktı şuna benzer görünmelidir:
"fmt": {
"baseline": "7.1.3",
"port-version": 1
},
--
"zlib": {
"baseline": "1.2.11",
"port-version": 9
},
3 - Temel sürümleri güncelleştirme
Temeller, tüm bağımlılıklarınızın sürümlerini aynı anda güncelleştirmek için kullanışlı bir mekanizma sunar. Temelinizi güncelleştirmek için aşağıdaki komutu çalıştırın:
vcpkg x-update-baseline
x-update-baseline
komutu, builtin-baseline
vcpkg örneğinizin geçerli Git işlemesine ayarlamak için bildirim dosyanızı değiştirir.
--add-initial-baseline
seçeneğini kullanarak henüz bir manifestosu olmayan bir bildiriye builtin-baseline
ekleyebilirsiniz.
4 - En düşük sürüm kısıtlaması ekleme
Temeller, paketin sürümünü kilitlemenin tek yolu değildir. vcpkg, version>=
biçimindeki en düşük sürüm kısıtlamalarını da kabul eder.
vcpkg.json
içeriğini şu şekilde değiştirin:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Yukarıdaki bildirim dosyası, fmt
üzerinde en düşük sürüm kısıtlamasını (version>=
) ayarlamak için bağımlılık nesnesi gösterimini kullanır. Vcpkg'nin bağımlılıkları karşılamak için biri taban çizgisinden diğeri de dependencies
listesindeki en düşük sürüm kısıtlamasından gelen iki kısıtlamayı karşılaması gerekir.
- Temel kısıtlama,
"version>=": "7.1.3"
. - Bağımlılıklar listesi için kısıtlama,
"version>=": "10.1.1"
.
Projeyi derleyin ve çalıştırın, %VCPKG_ROOT%
vcpkg yükleme yolunuzla değiştirin:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Çıkış şu şekilde görünmelidir:
fmt version is 100100
zlib version is 1.2.11
Bu durumda, fmt
'in 10.1.1
sürümü her iki kısıtlamayı da karşılar.
zlib
temel sürümünü 1.2.11
nasıl aldığına dikkat edin.
5 - Belirli bir sürümü zorlama
Bazı durumlarda, bir paketin belirli bir sürümünü zorlamak isteyebilirsiniz, örneğin:
- Sürüm çakışmalarını çözmek için.
- Temel sürümden eski sürümleri kilitlemek için.
- Karşılaştırılamayan sürümleri kilitlemek için, örneğin:
vista
,xp
.
vcpkg, sürüm geçersiz kılmalarını kullanarak bu sorunları çözmenize olanak tanır.
vcpkg.json
içeriğini şu şekilde değiştirin:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{
"name": "zlib",
"version": "1.2.8"
}
]
}
"overrides"
listesine eklenen tüm paketler, diğer tüm sürüm kısıtlamalarını yoksayarak belirtilen sürümü kullanır. Bu örnekte, temel 3426db05b996481ca31e95fff3734cf23e0f51bc
, zlib
için 1.2.11
en düşük sürüm kısıtlamasını ekler, ancak geçersiz kılma bildirimi sürüm 1.2.8
'ü zorlar.
Projeyi derleyin ve çalıştırın, %VCPKG_ROOT%
vcpkg yükleme yolunuzla değiştirin:
rm -r build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
cmake --build build
./build/main
Çıkış şu şekilde görünmelidir:
fmt version is 100100
zlib version is 1.2.8
Sonraki adımlar
Bu öğreticide, vcpkg'nin belirli paket sürümlerini kilitlemek için sunduğu farklı mekanizmaları öğrendiniz. vcpkg'nin sürüm çözümlemesini nasıl işlediği hakkında daha fazla bilgi edinmek için sürüm oluşturma kavramları ve başvuru okuyun.
Şimdi deneyebileceğiniz bazı ek görevler şunlardır:
- İkili dosyaları sürekli tümleştirme çalıştırmaları arasında ikili önbelleğe alma kullanarak yeniden kullanma
- özel kayıt defterlerini kullanarak özel kitaplıklarınızı yönetme