Sürüm oluşturma sorun giderme kılavuzu
Bu kılavuz, sürüm oluşturmaile ilgili sorunlar yaşayan kullanıcılara yöneliktir.
Bağlantı noktası için sürüm dosyasının incelenmesi
Not
Aşağıda açıklanan işlemin vcpkg kayıt defteribağlantı noktaları için çalışması amaçlanmıştır. Sürüm oluşturma veritabanının özel kayıt defterlerinde nasıl uygulandığını öğrenmek için kayıt defteri belgelerimize bakın.
Belirli bir bağlantı noktasının sürüm veritabanını incelemek için:
-
vcpkg/versions
dizinine gidin. - Bağlantı noktasının klasörünü bulun:
- Bağlantı noktasının ilk harfine karşılık gelen klasörü bulun. Örneğin,
fmt
içinf-
adlı klasörü açın.
- Bağlantı noktasının ilk harfine karşılık gelen klasörü bulun. Örneğin,
- Bağlantı noktaları sürüm dosyasını açın:
- Bağlantı noktasıyla aynı ada sahip JSON dosyasını bulun. Örneğin,
fmt
sürümleri dosyasının adıfmt.json.
- Bağlantı noktasıyla aynı ada sahip JSON dosyasını bulun. Örneğin,
Portun sürüm dosyası, sürüm etiketleri ve bunlara karşılık gelen Git ağaç-nesnesi karmagibi ayrıntılarla birlikte mevcut sürümlerin bir listesini içerir. Bu bilgiler vcpkg tarafından belirli bağlantı noktası sürümlerini almak için gereklidir. Bildirim dosyalarınızda yalnızca bu listede yer alan sürümler kullanılabilir.
Sürüm oluşturma hakkında daha fazla bilgi için başvuru belgelerimize bakın:
Bildirim kullanma hakkında daha fazla bilgi için bkz. manifesto
Neden: Paketin var olmayan bir sürümünü isteme
Bildirim dosyasında belirtilen bir sürüm vcpkg sürüm veritabanında mevcut olmadığında, vcpkg bağımlılığı çözümleyemiyor ve aşağıdakine benzer bir hata iletisi üretir:
error: no version database entry for fmt at 100.0.0
Available versions:
10.1.1
10.1.0
10.0.0
9.1.0#1
9.1.0
9.0.0
8.1.1#2
8.1.1#1
...
See `vcpkg help versioning` or https://learn.microsoft.com/vcpkg/users/versioning for more information.
Sorunu çözmek için:
- Sürüm veritabanını güncelleştirin:
- İstediğiniz sürüm, sürümler veritabanının yerel kopyasında olmayabilir. Bu durumda, vcpkg kayıt defterini'yi en son işlemeye güncellemek için
git pull
komutunu çalıştırın.
- İstediğiniz sürüm, sürümler veritabanının yerel kopyasında olmayabilir. Bu durumda, vcpkg kayıt defterini'yi en son işlemeye güncellemek için
- Kullanılabilir sürümleri denetleyin:
- Sürümler veritabanında kullanılabilen sürümlerden birini seçin.
- Bildirim dosyasını güncelleştir:
-
vcpkg.json
dosyanızı düzenleyin. - Belirtilen sürümü vcpkg deposunda kullanılabilen bir sürümle değiştirin. Örneğin, "sürüm>=": "100.0.0" yerine "sürüm>=": "10.1.1" olarak değiştirin.
-
- vcpkg yüklemesini çalıştırın:
- terminalinizde veya komut isteminizde
vcpkg install
komutunu yeniden yürütür.
- terminalinizde veya komut isteminizde
Neden: Farklı düzenler arasında sürüm kısıtlaması belirtme
Bir bağımlılık için vcpkg.json
dosyasında belirtilen sürüm, vcpkg deposunun temel sürümünde kullanılandan farklı bir sürüm oluşturma şeması kullandığında sürüm düzeni çakışması oluşur. Vcpkg farklı düzenlerdeki sürümleri karşılaştıramadığı için bu hatayla sonuçlanır.
Bildirilen bir version>=
kısıtlaması temel sürümde kullanılandan farklı bir sürüm düzeni kullanıyorsa, vcpkg hangi sürümün diğerinden büyük veya eşit olduğunu belirleyemez.
Örneğin, şunu belirtirseniz:
{
"dependencies": [
{
"name": "boost-regex",
"version>=": "1.75.0"
}
]
}
vcpkg aşağıdaki hata iletisini döndürür:
error: version conflict on boost-regex:x64-windows: required 1.75.0, which cannot be compared with the baseline version 1.83.0.
The versions have incomparable schemes:
boost-regex@1.83.0 has scheme relaxed
boost-regex@1.75.0 has scheme string
This can be resolved by adding an explicit override to the preferred version. For example:
"overrides": [
{ "name": "boost-regex", "version": "1.83.0" }
]
See `vcpkg help versioning` or https://learn.microsoft.com/vcpkg/users/versioning for more information.
Kararlar
- Uyumlu bir sürüm şeması kullanın:
- Temelle aynı sürüm oluşturma düzenini kullanan bir
boost-regex
sürümü bulmak içinversions/b-/boost-regex.json
altındaki vcpkg deposundaki sürüm veritabanını inceleyin. -
vcpkg.json
'dekiversion>=
kısıtlamasını uyumlu bir şema kullanan bir sürümle güncelleyin.
- Temelle aynı sürüm oluşturma düzenini kullanan bir
- İstenen sürüme geç.
- Farklı bir sürüm oluşturma şeması kullanan belirli bir boost-regex sürümüne ihtiyacınız varsa bildiriminizde bunu geçersiz kılabilirsiniz.
-
vcpkg.json
'ı, istediğiniz sürümü belirten bir üst yazmalar bölümü içerecek şekilde değiştirin.
{ "dependencies": [ { "name": "boost-regex" } ], "overrides": [ { "name": "boost-regex", "version": "1.75.0" } ] }
Neden: Sığ kopyada yetersiz commit geçmişi
vcpkg sınırlı bir işleme geçmişiyle (sığ kopya) kopyalandığında, belirli sürüm kısıtlamalarını veya taban çizgilerini çözümlemek için gerekli işleme geçmişinden yoksundur. Vcpkg tarafından bağlantı noktalarının belirli sürümlerini almak için kullanılan Git ağaç nesnesi karmaları yalnızca tam işleme geçmişi kullanıma alındığında kullanılabilir. vcpkg, sığ bir depoya ne zaman kopyalandığını algılar ve bağlantı noktası sürümünü alamadığında bir hata iletisi oluşturur.
Örneğin, aşağıdaki gibi belirli bir taban çizgisine sahip bir vcpkg.json
kullanma:
{
"dependencies": [
{
"name": "fmt"
}
],
"overrides": [
{
"name": "fmt",
"version": "7.1.3#1"
}
],
"builtin-baseline": "bb588985e37484d543fc849d0d79434e0d45bb3c"
}
Aşağıdaki hatayla sonuçlanır:
error: failed to execute: "C:\Program Files\Git\cmd\git.exe" "--git-dir=C:\dev\demo\vcpkg\.git" "--work-tree=C:\dev\demo\vcpkg\buildtrees\versioning_\versions\fmt\4f8427eb0bd40da1856d4e67bde39a4fda689d72_26648.tmp" -c core.autocrlf=false read-tree -m -u 4f8427eb0bd40da1856d4e67bde39a4fda689d72
vcpkg was cloned as a shallow repository in: C:\dev\demo\vcpkg\.git
Try again with a full vcpkg clone.
error: git failed with exit code: (128).
fatal: failed to unpack tree object 4f8427eb0bd40da1856d4e67bde39a4fda689d72
note: while checking out port fmt with git tree 4f8427eb0bd40da1856d4e67bde39a4fda689d72
Bu hata, paket fmt
'in belirli bir sürümü için gereken commit'in (4f8427eb0bd40da1856d4e67bde39a4fda689d72
) sığ klonlamada bulunmadığını belirtir.
Kararlar
Tam kopyaya dönüştür
- Bu sorunun en kolay çözümü tam kopyaya dönüştürmektir:
git fetch --unshallow
GitHub Actions'ı Kullanma (Varsayılan Sığ Klonlar)
- GitHub Actions genellikle basit kopyaları varsayılan olarak kullanır. Bu sorunu geçici olarak çözmek için GitHub Actions iş akışını değiştirerek tam kopya gerçekleştirebilirsiniz. vcpkg kullanmadan önce aşağıdaki adımı ekleyin:
- name: Convert to Full Clone run: git fetch --unshallow
Neden: Geçişli bağımlılıklara varsayılan özelliklerin beklenmedik şekilde eklenmesi
vcpkg ile bağımlılıkları yönetirken, geçişli bağımlılıkların projeniz için bu özellikleri istemeseniz bile varsayılan özellikleriyle yüklendiğini fark edebilirsiniz. Bu durum, son derlemenizde beklenmeyen bir şişkinliğe veya işlevselliğe yol açabilir.
Senaryo
Y
kitaplığına bağımlılığınız vardır ve bu da X
kitaplığına bağlıdır. Kitaplık X
, projenizin dışında tutmak istediğiniz foo
gibi varsayılan özelliklere sahiptir. Kitaplık Y
için en üst düzey bildiriminiz şuna benzer olabilir:
{
"name": "my-project",
"dependencies": [
{
"name": "Y",
"features": ["featureB"],
"default-features": false
}
]
}
"default-features": false
ayarı nedeniyle X
varsayılan özellikleri olmadan yüklenmesini bekliyorsunuz. Ancak, X
foo
varsayılan özelliğiyle yüklenmeye devam etmektedir.
Sebep
default-features
özelliği yalnızca üst düzey bildirimde kabul edilir. Bu, geçişli bağımlılıkların varsayılan özelliklerinin (bu senaryoda X
gibi) en üst düzeyde açıkça devre dışı bırakılmadığı sürece yine de dahil olduğu anlamına gelir. Kitaplık Y
çözümlendiğinde, vcpkg
, "default-features": false
ayarını geçişli bağımlılık X
'e yaymadığından, X
varsayılan özellikleriyle yüklenir.
Çözünürlük
X
gibi geçişli bağımlılıkların varsayılan özellikleri olmadan yüklendiğinden emin olmak için bunları üst düzey bildiriminizde bağımlılıkları yönlendirecek şekilde yükseltmeniz ve varsayılan özelliklerini açıkça devre dışı bırakmanız gerekir.
"default-features": false
ile doğrudan vcpkg.json
'ı X
'i içerecek şekilde değiştirin.
{
"name": "my-project",
"dependencies": [
{
"name": "Y",
"features": ["featureB"]
},
{
"name": "X",
"default-features": false
}
]
}
Bu yaklaşım, X
varsayılan özellikleri olmadan yüklenmesini sağlar. Artık X
varsayılan özellikleri dışlamak için açık yönergeye sahip doğrudan bir bağımlılıktır.
Varsayılan özelliklerin nasıl çalıştığı ve bunları nasıl yönetecekleri hakkında daha ayrıntılı bilgi için varsayılan özellikler kavramı makalesi makalesine bakın.
Sorun burada listelenmiyor
Sorununuz burada listelenmiyorsa, yeni bir sorun oluşturmak için depo ziyaret edin.