Aracılığıyla paylaş


Öğ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 fmtkullanı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.11nası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ı zlib1.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: