Öğretici: Paketin belirli bir sürümünü yükleme
Önemli
Bu özellik yalnızca bildirim modunda kullanılabilir.
vcpkg, projenizdeki her bağımlılığın kesin sürümlerini denetlemenize olanak tanır.
Bu öğreticide şunları öğreneceksiniz:
Önkoşullar
- 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 bildirimi (vcpkg.json
):
{
"dependencies": [ "fmt", "zlib" ]
}
Projeyi oluşturun, yerine %VCPKG_ROOT%
vcpkg yükleme yolunuz yazın:
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 içeriğini vcpkg.json
şu şekilde değiştirin:
{
"dependencies": [
"fmt",
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
vcpkg deposunun belirli bir işleme SHA'sına ayarlanması builtin-baseline
, 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
komutu, x-update-baseline
bildirim dosyanızı vcpkg örneğinizin geçerli Git işlemesine ayarlı olarak builtin-baseline
değiştirir.
Henüz bir bildirimi olmayan bir builtin-baseline
bildirime eklemek için seçeneğini kullanabilirsiniz--add-initial-baseline
.
4 - En düşük sürüm kısıtlaması ekleme
Temeller, paketin sürümünü kilitlemenin tek yolu değildir. vcpkg, biçimindeki version>=
en düşük sürüm kısıtlamalarını da kabul eder.
içeriğini vcpkg.json
şu şekilde değiştirin:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Yukarıdaki bildirim dosyası, üzerinde en düşük sürüm kısıtlamasını (version>=
) ayarlamak için bağımlılık nesnesi gösterimini fmt
kullanır. Vcpkg'nin bağımlılıkları karşılamak için biri taban çizgisinden diğeri de listedeki en düşük sürüm kısıtlamasından gelen iki kısıtlamayı dependencies
karşılaması gerekir.
- Temel kısıtlama,
"version>=": "7.1.3"
. - Bağımlılıklar listesi kısıtlaması,
"version>=": "10.1.1"
.
Projeyi derleyip çalıştırın, yerine vcpkg yükleme yolunuz yazın %VCPKG_ROOT%
:
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 sürümü her 10.1.1
iki kısıtlamayı fmt
da karşılar. Temel sürümünü 1.2.11
nasıl zlib
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.
- Temelden eski sürümleri kilitlemek için.
- Aksi halde anlaşılmaz olan 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.
İçeriği şu şekilde vcpkg.json
değiştirin:
{
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.1"
},
"zlib"
],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{
"name": "zlib",
"version": "1.2.8"
}
]
}
Listeye dahil edilen "overrides"
tüm paketler, diğer tüm sürüm kısıtlamalarını yoksayarak belirtilen sürümü kullanır. Bu örnekte taban çizgisi 3426db05b996481ca31e95fff3734cf23e0f51bc
en düşük sürüm kısıtlamasını zlib
1.2.11
ekler, ancak geçersiz kılma bildirimi bunun yerine sürümü 1.2.8
zorlar.
Projeyi derleyip çalıştırın, yerine vcpkg yükleme yolunuz yazın %VCPKG_ROOT%
:
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ını ve başvuruyu okuyun.
Şimdi deneyebileceğiniz bazı ek görevler şunlardır:
- İkili önbelleğe alma kullanarak Sürekli Tümleştirme çalıştırmaları arasında ikili dosyaları yeniden kullanma
- Özel kayıt defterlerini kullanarak özel kitaplıklarınızı yönetme