İngilizce dilinde oku

Aracılığıyla paylaş


Öğretici: Kayıt defteri temellerini kullanarak Boost kitaplıklarının belirli bir sürümünü yükleme

vcpkg, yalnızca sınırlı bir Boost paketleri alt kümesine bağımlı olan kullanıcılar için kolaylık sağlamak için kitaplık kümesini tek tek paketler olarak sağlar Boost . Ancak bu yaklaşımın bir dezavantajı vardır. Boost bağımlılıklarının belirli bir sürümünü kilitlemek isteyen kullanıcıların bağımlı oldukları her Boost paketinin sürümlerini geçersiz kılmaları gerekir.

Ancak, kayıt defteri taban çizgilerini ve paket desenlerini kullanarak bu sorunun basit bir çözümü vardır.

Önkoşullar

  • Terminal
  • C++ derleyicisi
  • vcpkg

Sorun

Bağlı olan bir projeniz olduğunu ve Boost kitaplıklarının boost-optional sürümünü 1.80.0 kilitlemek istediğinizi varsayalım. Bu nedenle aşağıda gösterildiği gibi bağımlılığınız için bir geçersiz kılma oluşturursunuz:

vcpkg.json

{
    "dependencies": [ "boost-optional" ],
    "overrides": [
        { "name": "boost-optional", "version": "1.80.0" }
    ]
}

vcpkg-configuration.json

{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/Microsoft/vcpkg",
    "baseline": "3265c187c74914aa5569b75355badebfdbab7987"
  }
}

komutunu çalıştırdığınızda vcpkg installyalnızca sürümünün boost-optional kilitlendiğini 1.80.0 ve diğer Boost bağımlılıklarının temel sürümü (1.83.0) kullandığını fark edeceksiniz.

Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
  * boost-assert:x64-linux -> 1.83.0
  * boost-config:x64-linux -> 1.83.0
  * boost-core:x64-linux -> 1.83.0
  * boost-detail:x64-linux -> 1.83.0
  * boost-io:x64-linux -> 1.83.0
  * boost-move:x64-linux -> 1.83.0
    boost-optional:x64-linux -> 1.80.0
  * boost-predef:x64-linux -> 1.83.0
  * boost-preprocessor:x64-linux -> 1.83.0
  * boost-static-assert:x64-linux -> 1.83.0
  * boost-throw-exception:x64-linux -> 1.83.0
  * boost-type-traits:x64-linux -> 1.83.0
  * boost-uninstall:x64-linux -> 1.83.0
  * boost-utility:x64-linux -> 1.83.0
  * boost-vcpkg-helpers:x64-linux -> 1.83.0
Additional packages (*) will be modified to complete this operation.

1 - Boost sürüm temelini alma

Paketin sürüm veritabanını değiştiren işlemelerin geçmişini görmek için boost-optional aşağıdaki komutu çalıştırın:

git log "--format=%H %cd %s" --date=short --left-only -- versions/b-/boost-optional.json

Şuna benzer bir çıktı görmeniz gerekir:

caa7579a1c48e2ca770f6ccf98cb03db95642631 2023-09-13 [boost] update to v1.83.0 (#33597)
5d3798ac7388ca66c169773e46103b14077b76a4 2023-06-06 [boost] Remove port version constraints (#31572)
501db0f17ef6df184fcdbfbe0f87cde2313b6ab1 2023-04-15 [boost-build] Fix SHA512 and add MSVC workaround. (#30884)
bedfdb774cfbe47da202169046ca15441a213f3e 2023-04-15 [Boost] Update Boost ports to 1.82#0 (#30856)
9484a57dd560b89f0a583be08af6753611c57fd5 2023-02-24 Update vcpkg-tool to 2023-02-16. (#29664)
6aa38234d08efefc55b70025cf6afc2212e78e15 2023-02-01 [boost] Fix generate ports to match the tree. (#29338)
6d41737729b170cb7d323a4fddd21607c9237636 2022-12-20 [boost] update to 1.81.0 (#28356)
5ba2b95aea2a39aa89444949c7a047af38c401c1 2022-10-18 [boost] Add version constraints (#26817)
8424da584e59e05956913bf96f87654aa3096c7e 2022-08-25 [boost] update to 1.80.0 (#26233)
96ec7fb25da25e0463446e552d59715a47c95e73 2022-04-21 [boost] update to 1.79.0 (#24210)
76d4836f3b1e027758044fdbdde91256b0f0955d 2022-01-10 [boost] update to 1.78.0 (#21928)
cc471dc0f59b7b2066d6172c2893419412327a7a 2021-09-27 [boost] update to 1.77.0 (#19556)
761c81d43335a5d5ccc2ec8ad90bd7e2cbba734e 2021-07-07 [boost] update to 1.76.0 (#17335)
68a74950d0400f5a803026d0860f49853984bf11 2021-01-21 [vcpkg] Rename `port_versions` to `versions` (#15784)

Gördüğünüz gibi, sürüm 1.80.0 için işleme listelenir. Sonraki adımda bu işlemeyi tüm Boost paketlerinin temeli olarak kullanacaksınız.

2 - Boost paketlerini geçersiz kılmak için temel kullanma

Tüm ilgili Boost bağımlılıkları için geçersiz kılma eklemek yerine, bunun yerine sürüm kümesini kilitlemek için bir kayıt defteri temeli kullanabilirsiniz. Aşağıda gösterildiği gibi dosyanızı vcpkg-configuration.json değiştirin:

vcpkg-configuration.json

{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/Microsoft/vcpkg",
    "baseline": "3265c187c74914aa5569b75355badebfdbab7987"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/Microsoft/vcpkg",
      "baseline": "8424da584e59e05956913bf96f87654aa3096c7e",
      "packages": [ "boost*", "boost-*"]
    }
  ]
}

Yapılandırma dosyası iki kayıt defteri tanımı içerir. Bu default-registry makale yazılırken en son işlemeyi kullanırken vcpkg tarafından seçilmiş kayıt defterine https://github.com/Microsoft/vcpkg işaret eder. Ayrıca vcpkg tarafından seçilmiş kayıt defterine işaret eden ancak önceki bir taban çizgisine işaret eden ve ve boost-* desenleri ile eşleşen paketler ile boost* sınırlı olan ikinci bir kayıt defteri.

Komutunu çalıştırırsanız vcpkg install , bu kez tüm Boost kitaplıklarının sürümünü 1.80.0kullandığını fark etmelisiniz.

Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
  * boost-assert:x64-linux -> 1.80.0
  * boost-config:x64-linux -> 1.80.0
  * boost-core:x64-linux -> 1.80.0
  * boost-detail:x64-linux -> 1.80.0
  * boost-io:x64-linux -> 1.80.0
  * boost-move:x64-linux -> 1.80.0
    boost-optional:x64-linux -> 1.80.0
  * boost-predef:x64-linux -> 1.80.0
  * boost-preprocessor:x64-linux -> 1.80.0
  * boost-static-assert:x64-linux -> 1.80.0
  * boost-throw-exception:x64-linux -> 1.80.0
  * boost-type-traits:x64-linux -> 1.80.0
  * boost-uninstall:x64-linux -> 1.80.0
  * boost-utility:x64-linux -> 1.80.0
  * boost-vcpkg-helpers:x64-linux -> 1.80.0
  * boost-winapi:x64-linux -> 1.80.0
Additional packages (*) will be modified to complete this operation.

Aynı yaklaşım gibi qtdiğer meta paketler için de kullanılabilir.

Sonraki adımlar

Şimdi deneyebileceğiniz bazı ek görevler şunlardır: