vcpkg.json Başvurusu
vcpkg ile bildirimleri kullanmaya genel bakış için bkz . Bildirim modu.
Bildirimler katı JSON belgeleridir. C++stili açıklamalar (//
) veya sondaki virgülleri içeremezler. Ancak, iyi tanımlanmış anahtar kümesine sahip herhangi bir nesneye açıklamalarınızı yazmak için ile $
başlayan alan adlarını kullanabilirsiniz. Bu açıklama alanlarına, kullanıcı tanımlı anahtarlara (örneğin "features"
) izin veren hiçbir nesnede izin verilmez.
En son JSON Şemasına adresinden https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.jsonulaşabilirsiniz. Visual Studio ve Visual Studio Code gibi JSON Şeması desteğine sahip IDE'ler, otomatik tamamlama ve söz dizimi denetimi sağlamak için bu dosyayı kullanabilir. Çoğu IDE için, url'nizde vcpkg.json
bu URL'yi ayarlamanız "$schema"
gerekir.
Örnek
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"dependencies": [
"boost-system",
{
"name": "cpprestsdk",
"default-features": false
},
"libxml2",
"yajl"
]
}
Bu örnekte , , cpprestsdk
libxml2
ve yajl
kullanan boost-system
bir uygulama bildirimi gösterilmektedir. Örnek ayrıca daha iyi IDE doğrulaması ve otomatik tamamlama sağlamak için bir $schema
başvuru içerir.
Üst Düzey Alanlar
Veri Akışı Adı | Zorunlu | Türü | Açıklama |
---|---|---|---|
yerleşik taban çizgisi | Hayır | Dize | En üst düzey olarak oluştururken kullanılacak sürüm sabitlemeleri |
varsayılan özellikler | Hayır | Özellik Nesnesi[] | Varsayılan olarak listelenen özellikleri gerektir |
Bağımlılık | Hayır | Bağımlılık[] | Bu projeyi oluşturmak ve kullanmak için gereken bağımlılıkların listesi |
Açıklama | Kitaplıklar | dize veya dize[] | Proje açıklaması |
Belge | Hayır | Dize | Yukarı akış projesinin belgelerine URI |
features | Hayır | {string: Feature} | Proje kullanıcıları için kullanılabilen isteğe bağlı özellikler |
giriş sayfası | Hayır | Dize | Yukarı akış projesinin giriş sayfasına URI |
lisans | Hayır | dize veya null | SPDX lisans ifadesi |
bakımcılar | Hayır | dize veya dize[] | Paket dosyalarının bakımcıları |
ad | Kitaplıklar | Dize | Proje adı |
Geçersiz kılınır | Hayır | Geçersiz Kıl[] | En üst düzey olarak oluştururken kullanılacak sürüm sabitlemeleri |
bağlantı noktası sürümü | Hayır | integer | Bağlantı noktası dosyaları düzeltmesi |
Destekle -yen | Hayır | Platform İfadesi | Desteklenen platform ve derleme yapılandırmaları |
Sürüm sürüm-semver sürüm tarihi sürüm dizesi |
Kitaplıklar | Dize | Yukarı akış sürüm bilgileri |
"builtin-baseline"
Varsayılan kayıt defterinde sürüm çözümlemesini "baseline"
belirtmek için bir kısayol. Bir dize. İsteğe bağlı, yalnızca üst düzey projeler tarafından kullanılır.
Bu alan, bildiriminiz için genel en düşük sürüm bilgilerini sağlayan işlemeyi https://github.com/microsoft/vcpkg gösterir. Belirtilen "default-registry"
bir olmadan sürüm oluşturma kullanan en üst düzey bildirim dosyaları için gereklidir. Varsayılan kayıt defterinizi tanımlamakla aynı anlamsal değere sahiptir:
{
"default-registry": {
"kind": "builtin",
"baseline": "<value>"
}
}
Daha fazla anlamsal ayrıntı için bkz . sürüm oluşturma ve Kayıt defterlerini kullanma.
"default-features"
Ek özelleştirme olmadan makul davranış için gereken özellik kümesi.
Aşağıdakilerden biri varsa varsayılan özellikler otomatik olarak seçilir:
- Bağlantı noktası için bağlantı noktasından bağlantı noktasına bağımlılığında varsayılan değer bulunur
"default-features": true
. - Üst düzey bildirimin ile
"default-features": false
bağlantı noktası için bağımlılığı yoktur.
Varsayılan özellikler, üst düzey projenin bilmediği geçişli bağımlılıklar için "varsayılan" yapılandırma sağlama örneğini işler. Başkaları tarafından kullanılan bağlantı noktalarının bağımlılıkları için neredeyse her zaman kullanılması "default-features": false
gerekir.
Özellik Nesnesi kullanarak platforma özgü varsayılan özellikleri tanımlayabilirsiniz:
{
"name": "my-port",
"default-features": [
"png",
{
"name": "winssl",
"platform": "windows"
}
]
}
Özellikler hakkında daha fazla bilgi için bkz "features"
.
"description"
Bağlantı noktasının açıklaması. Dize veya dize dizisi. Kitaplıklar için gereklidir, üst düzey projeler için isteğe bağlıdır.
Bu, kullanıcıların bir search
veya find
komutunun parçası olarak kitaplığı bulmasına ve kitaplığın ne yaptığını öğrenmesine yardımcı olmak için kullanılır.
"dependencies"
Projenin gerektirdiği bağımlılıkların listesi. Bağımlılık nesneleri dizisi. isteğe bağlı.
Bu alanda, kitaplığınızı veya uygulamanızı oluşturmak ve kullanmak için gereken tüm bağımlılıklar listelenir.
Örnek bağlantı noktası bağımlılıkları
"dependencies": [
{
"name": "arrow",
"default-features": false,
"features": [
"json",
{
"name": "mimalloc",
"platform": "windows"
}
]
},
"boost-asio",
"openssl",
{
"name": "picosha2",
"platform": "!windows"
}
]
"documentation"
Yukarı akış projesinin belgelerine ilişkin URI. Bir dize. isteğe bağlı.
"features"
Projenin kullanıcıları için kullanılabilen özellikler . Adların Feature nesneleriyle eşlemini. isteğe bağlı.
Özellikler, derlemeye ek davranışlar ve bağımlılıklar ekleyen boole bayraklarıdır. Özellikler hakkında daha fazla bilgi için Bildirim Kavramı Belgeleri'ne bakın.
"homepage"
Projenin giriş sayfasının URI'sini. Bir dize. isteğe bağlı.
"license"
Projenin SPDX kısa lisans ifadesi. Dize veya null. isteğe bağlı.
"license"
bir SPDX 3.19 lisans ifadesi olmalı null
veya kullanıcıların dağıtılan /share/<port>/copyright
dosyayı okuması gerektiğini belirtmelidir. DocumentRefs desteklenmez.
Not
vcpkg kayıt defterindeki her paket için sağlanan lisans bilgileri, Microsoft'un lisanslama gereksinimlerini en iyi şekilde anlamayı temsil eder. Ancak, bu bilgiler kesin olmayabilir. Kullanıcıların, kullanmak istedikleri her paket için tam lisanslama gereksinimlerini doğrulamaları önerilir, bu nedenle ilgili lisanslarla uyumluluğu sağlamak kendi sorumluluğundadır.
Örnek lisans dizeleri
MIT
LGPL-2.1-only AND BSD-2-Clause
GPL-2.0-or-later WITH Bison-exception-2.2
EBNF
vcpkg, lisans alanını ayrıştırmak için aşağıdaki EBNF'yi kullanır:
idchar = ? regex /[-.a-zA-Z0-9]/ ?
idstring = ( idchar ), { idchar } ;
(* note that unrecognized license and license exception IDs will be warned against *)
license-id = idstring ;
license-exception-id = idstring ;
(* note that DocumentRefs are unsupported by this implementation *)
license-ref = "LicenseRef-", idstring ;
with = [ whitespace ], "WITH", [ whitespace ] ;
and = [ whitespace ], "AND", [ whitespace ] ;
or = [ whitespace ], "OR", [ whitespace ] ;
simple-expression = [ whitespace ], (
| license-id
| license-id, "+"
| license-ref
), [ whitespace ] ;
(* the following are split up from compound-expression to make precedence obvious *)
parenthesized-expression =
| simple-expression
| [ whitespace ], "(", or-expression, ")", [ whitespace ] ;
with-expression =
| parenthesized-expression
| simple-expression, with, license-exception-id, [ whitespace ] ;
(* note: "a AND b OR c" gets parsed as "(a AND b) OR c" *)
and-expression = with-expression, { and, with-expression } ;
or-expression = and-expression, { or, and-exression } ;
license-expression = or-expression ;
"maintainers"
Paket bakımcıları listesi. Dize veya dize dizisi. isteğe bağlı.
"Verilen Ad Soyadı<e-postası>" formunu kullanmanızı öneririz.
"name"
Projenin adı. Bir dize. Kitaplıklar için gereklidir, üst düzey projeler için isteğe bağlıdır.
Ad küçük harf, rakam veya kısa çizgi (-
) olmalıdır. Kısa çizgiyle başlamamalı veya bitmemelidir. Kitaplıkların, kullanıcıların ilişkili kitaplıkları bulmasına ve tanımlamasına yardımcı olmak için veya gibi bir ön ek olarak msft-
kuruluşlarını veya boost-
çerçeve adlarını eklemeleri önerilir.
Örneğin, resmi adı Boost.Asio
olan bir kitaplığa adı boost-asio
verilebilir.
"overrides"
Belirli bağımlılıklar için kullanılacak tam sürüm sabitleri. Geçersiz kılma nesneleri dizisi. isteğe bağlı.
"overrides"
geçişli bildirimlerden (yani bağımlılıklardan) yoksayılır. Yalnızca üst düzey proje tarafından tanımlanan geçersiz kılmalar kullanılır.
Veri Akışı Adı | Zorunlu | Türü | Açıklama |
---|---|---|---|
Adı | Yes | Dize | Bağlantı noktası adı |
version | Yes | Dize | Sabitlemek için yukarı akış sürüm bilgileri. |
sürüm-semver sürüm tarihi sürüm dizesi |
Yes | Dize | Belirli düzenleri adlandırmak için version kullanım dışı bırakılan alternatifler. |
bağlantı noktası sürümü | Hayır | integer | Sabitlemek için bağlantı noktası dosyaları düzeltmesi. Sürümün kendisine yerleştirilmesinden yana kullanım dışı bırakıldı. |
"port-version"
içinde "version"
sonek #N
olarak belirtilmelidir. Örneğin, "version": "1.2.3#7"
sürüm 1.2.3, bağlantı noktası sürüm 7 olarak adlandırabilirsiniz.
Ayrıca daha anlamsal ayrıntılar için bkz. sürüm oluşturma .
Sürüm geçersiz kılma örneği
"overrides": [
{
"name": "arrow", "version": "1.2.3#7"
},
{
"name": "openssl", "version": "1.1.1h#3"
}
]
"port-version"
Paketleme dosyalarındaki düzeltmeleri ayırt eden bir sürüm soneki. Tamsayı. varsayılan değeridir 0
.
"port-version"
, yukarı akış kaynak sürümünü değiştirmeyen yeni bir bağlantı noktası sürümü yayımlandığında artırılmalıdır. Yukarı akış kaynak sürümü değiştirildiğinde, sürüm alanı değişmeli ve "port-version"
olarak sıfırlanmalıdır 0
(veya kaldırılmalıdır).
Daha fazla ayrıntı için bkz . sürüm oluşturma .
"supports"
Desteklenen platform ve derleme yapılandırmaları. Platform ifadesi. isteğe bağlı.
Bu alan, bir projenin belirli platform yapılandırmalarında başarıyla derlenip çalıştırılmasının beklenmediğini belgelemektedir.
Örneğin, kitaplığınız Linux için derlemeyi desteklemiyorsa kullanabilirsiniz "supports": "!linux"
.
"vcpkg-configuration"
vcpkg yapılandırma özelliklerini dosyanın içine eklemeye vcpkg.json
izin verir. Özelliğin vcpkg-configuration
içindeki her şey bir vcpkg-configuration.json
dosyada tanımlanmış gibi değerlendirilir. Daha fazla ayrıntı için belgelere vcpkg-configuration.json
bakın.
vcpkg-configuration
bir dosyaya sahipken içinde vcpkg.json
tanımlanmış olmasına vcpkg-configuration.json
izin verilmez ve vcpkg komutu bir hata iletisiyle sonlandırılır.
Örnek katıştırılmış vcpkg-configuration
{
"name": "test",
"version": "1.0.0",
"dependencies": [ "beison", "zlib" ],
"vcpkg-configuration": {
"registries": [
{
"kind": "git",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [ "./my-ports/fmt",
"./team-ports"
]
}
"version"
, "version-semver"
, "version-date"
, "version-string"
Yukarı akış projesinin sürümü. Bir dize. Kitaplıklar için gereklidir, üst düzey projeler için isteğe bağlıdır.
Bildirim en fazla bir sürüm alanı içermelidir. Her sürüm alanı farklı bir sürüm oluşturma düzenine karşılık gelir:
"version"
- 3'ten fazla veya daha az birincil sayıya izin veren Gevşek AnlamSal Sürüm 2.0.0. Örnek:1.2.3.4.10-alpha1
"version-semver"
- Katı AnlamSal Sürüm 2.0.0. Örnek:2.0.1-rc5
"version-date"
- İsteğe bağlı noktalı ayrı sayısal diziyle biçimlendirilmişYYYY-MM-DD
bir tarih. Sayısal sürümlere sahip olmayan paketler için kullanılır (örneğin, Live-at-HEAD). Örnek:2022-12-09.314562
"version-string"
- Rastgele bir dize. Sipariş edilebilir sürümleri olmayan paketler için kullanılır. Bu nadiren kullanılmalıdır, ancak diğer sürüm alanları kullanılmadan önce oluşturulan tüm bağlantı noktaları bu düzeni kullanır.
Daha fazla ayrıntı için bkz . sürüm oluşturma .
Bağımlılık Alanları
Her bağımlılık, aşağıdaki alanlara sahip bir dize veya nesnedir:
Veri Akışı Adı | Zorunlu | Türü | Açıklama |
---|---|---|---|
varsayılan özellikler | Hayır | ikili | Varsayılan olarak listelenen özellikleri gerektir |
features | Hayır | Özellik Nesnesi[] | Gerektirecek ek özelliklerin listesi |
host | Hayır | ikili | Hedef yerine konak makine için bağımlılık gerektirme |
ad | Yes | Dize | Bağımlılığın adı |
peron | Hayır | Platform İfadesi | Bağımlılığın kullanılacağı platformlar için niteleyici |
version>= | Hayır | Dize | Gerekli en düşük sürüm. Bağlantı noktası sürümü bir #N sonekle tanımlanır, örneğin, 1.2.3#7 bağlantı noktası sürümü 7 olarak adlandırılır. |
Dizeler, dize değerine tanımlı ada sahip bir nesne olarak yorumlanır.
Bağımlılık: "default-features"
Projenin bağımlılığın 'varsayılan olarak açık' özelliklerine bağlı olduğunu gösteren boole değeri. varsayılan değeridir true
.
Çoğu durumda, bu tanımlanmalı false
ve gerekli özellikler açıkça bağımlı olmalıdır.
Bağımlılık: "features"
Gerektirecek ek özelliklerin listesi. Özellik nesneleri dizisi. isteğe bağlı.
Özellik Nesnesi, aşağıdaki alanlara sahip bir nesnedir:
name
- Özelliğin adı. Bir dize. Gerekli.platform
- Özelliğin gerekli olduğu platformları sınırlayan bir Platform İfadesi. isteğe bağlı.
Basit dize, ile aynı zamanda geçerli Feature Object
bir eşdeğerdir { "name": "<feature-name>" }
.
Örneğin,
{
"name": "ffmpeg",
"default-features": false,
"features": [
"mp3lame",
{
"name": "avisynthplus",
"platform": "windows"
}
]
}
ffmpeg
mp3 kodlama desteği ile kitaplığını kullanır. Yalnızca avisynthplus
Windows'ta destek de etkinleştirilir.
Bağımlılık: "host"
Bağımlılığın geçerli bağlantı noktasının üçlüsü yerine konak üçlüsü için derlenmesi gerektiğini belirten boole değeri. varsayılan değeridir false
.
Derleme sırasında "yürütülmesi" gereken araçlar veya betikler sağlayan tüm bağımlılıklar (derleme sistemleri, kod oluşturucular veya yardımcılar gibi) olarak "host": true
işaretlenmelidir. Bu, hedefin yürütülebilir olmadığı durumlarda (örneğin derleme sırasında arm64-android
) doğru çapraz derlemeyi etkinleştirir.
Daha fazla bilgi için bkz . Konak bağımlılıkları .
Bağımlılık: "name"
Bağımlılığın adı. Bir dize. Gerekli.
Bu, bir projenin özelliğiyle "name"
aynı kısıtlamaları izler.
Bağımlılık: "platform"
Bağımlılığın gerekli olduğu platformları sınırlayan bir ifade. Platform ifadesi. isteğe bağlı.
İfade geçerli yapılandırmayla eşleşmiyorsa bağımlılık kullanılmaz. Örneğin, bir bağımlılık varsa "platform": "!windows"
, yalnızca Windows dışı sistemleri hedeflerken gereklidir.
Bağımlılık: "version>="
Bağımlılıkta en düşük sürüm kısıtlaması.
Bu alan, isterseniz en düşük bağlantı noktası sürümünü belirtmek için isteğe bağlı olarak bir #N
sonek kullanarak bağımlılığın en düşük sürümünü belirtir.
Sürüm oluşturma semantiği hakkında daha fazla bilgi için bkz . Sürüm oluşturma.
Özellik Alanları
Her özellik aşağıdaki alanlara sahip bir nesnedir:
Veri Akışı Adı | Zorunlu | Türü | Açıklama |
---|---|---|---|
Açıklama | Yes | Dize | Özelliğin açıklaması |
Bağımlılık | Hayır | Bağımlılık[] | Bağımlılıkların listesi |
Destekle -yen | Hayır | Platform İfadesi | Özelliğin desteklediği platformlar ve yapılandırmalar için niteleyici |
lisans | Hayır | dize veya null | SPDX lisans ifadesi |
Özelliklere kavramsal bir genel bakış için Bildirim modu belgelerine göz atın.
Özelliklere sahip örnek bağlantı noktası
{
"features": {
"cbor": {
"description": "The CBOR backend",
"dependencies": [
{
"$explanation": [
"This is how you tell vcpkg that the cbor feature depends on the json feature of this package"
],
"name": "libdb",
"default-features": false,
"features": [ "json" ]
}
]
},
"csv": {
"description": "The CSV backend",
"dependencies": [
"fast-cpp-csv-parser"
]
},
"json": {
"description": "The JSON backend",
"dependencies": [
"jsoncons"
]
}
}
}
Özellik: "dependencies"
Özelliğin gerektirdiği bağımlılıkların listesi. Bağımlılık nesneleri dizisi. isteğe bağlı.
Bu alanda, özelliği oluşturmak ve kullanmak için gereken tüm ek bağımlılıklar listelenir.
Özellik: "description"
Özelliğin açıklaması. Dize veya dize dizisi. Gerekli.
Bu, kullanıcıların bir search
veya find
komutunun parçası olarak özelliği bulmasına ve özelliğin ne yaptığını öğrenmesine yardımcı olmak için kullanılır.
Özellik: "supports"
Özellik için desteklenen platform ve derleme yapılandırmaları. Platform ifadesi. isteğe bağlı.
Bu alan, özelliğin başarıyla derlenip çalıştırılacağı platform yapılandırmalarını belgelemektedir.
Özellik: "license"
Özelliğin SPDX kısa lisans ifadesi. Dize veya null. isteğe bağlı. Sağlanmadıysa, lisans en üst düzey lisans alanında belirtilenle aynıdır.
Not
vcpkg kayıt defterindeki her paket için sağlanan lisans bilgileri, Microsoft'un lisanslama gereksinimlerini en iyi şekilde anlamayı temsil eder. Ancak, bu bilgiler kesin olmayabilir. Kullanıcıların, kullanmak istedikleri her paket için tam lisanslama gereksinimlerini doğrulamaları önerilir, bu nedenle ilgili lisanslarla uyumluluğu sağlamak kendi sorumluluğundadır.
Platform İfadesi
Platform İfadesi, bir bağımlılığın ne zaman gerekli olduğunu veya bir kitaplığın veya özelliğin ne zaman oluşturulmasının beklendiğini açıklayan bir JSON dizesidir.
İfadeler ilkel tanımlayıcılardan, mantıksal işleçlerden ve gruplandırmadan oluşturulur:
!<expr>
,not <expr>
- olumsuzlama<expr>|<expr>
,<expr>,<expr>
- mantıksal VEYA (anahtar sözcükor
ayrılmıştır ancak platform ifadelerinde geçerli değildir)<expr>&<expr>
,<expr> and <expr>
- mantıksal AND(<expr>)
- gruplandırma/öncelik
Aşağıdaki tanımlayıcılar üçlü ayarlara ve derleme yapılandırmasına göre tanımlanır:
Tanımlayıcı | Üçlü Koşul |
---|---|
x64 |
VCPKG_TARGET_ARCHITECTURE == "x64" |
x86 |
VCPKG_TARGET_ARCHITECTURE == "x86" |
arm |
VCPKG_TARGET_ARCHITECTURE == "arm" veyaVCPKG_TARGET_ARCHITECTURE == "arm64" |
arm32 |
VCPKG_TARGET_ARCHITECTURE == "arm" |
arm64 |
VCPKG_TARGET_ARCHITECTURE == "arm64" |
arm64ec |
VCPKG_TARGET_ARCHITECTURE == "arm64ec" |
wasm32 |
VCPKG_TARGET_ARCHITECTURE == "wasm32" |
mips64 |
VCPKG_TARGET_ARCHITECTURE == "mips64" |
windows |
VCPKG_CMAKE_SYSTEM_NAME == "" veya veyaVCPKG_CMAKE_SYSTEM_NAME == "WindowsStore" VCPKG_CMAKE_SYSTEM_NAME == "MinGW" |
mingw |
VCPKG_CMAKE_SYSTEM_NAME == "MinGW" |
uwp |
VCPKG_CMAKE_SYSTEM_NAME == "WindowsStore" |
xbox |
VCPKG_CMAKE_SYSTEM_NAME == "" veXBOX_CONSOLE_TARGET tanımlanır. |
linux |
VCPKG_CMAKE_SYSTEM_NAME == "Linux" |
osx |
VCPKG_CMAKE_SYSTEM_NAME == "Darwin" |
ios |
VCPKG_CMAKE_SYSTEM_NAME == "iOS" |
freebsd |
VCPKG_CMAKE_SYSTEM_NAME == "FreeBSD" |
openbsd |
VCPKG_CMAKE_SYSTEM_NAME == "OpenBSD" |
android |
VCPKG_CMAKE_SYSTEM_NAME == "Android" |
emscripten |
VCPKG_CMAKE_SYSTEM_NAME == "Emscripten" |
qnx |
VCPKG_CMAKE_SYSTEM_NAME == "QNX" |
vxworks |
VCPKG_CMAKE_SYSTEM_NAME == "VxWorks" |
static |
VCPKG_LIBRARY_LINKAGE == "static" |
staticcrt |
VCPKG_CRT_LINKAGE == "static" |
native |
TARGET_TRIPLET == HOST_TRIPLET |
Örnek platform ifadesi
- Windows dışındaki işletim sisteminde sha256 gerekiyor
picosha2
, ancak Windows'ta işletim sisteminden alın (BCrypt)
{
"name": "picosha2",
"platform": "!windows"
}
- Arm64 Windows ve amd64 Linux üzerinde zlib gerektir
{
"name": "zlib",
"platform": "(windows & arm64) | (linux & x64)"
}