Aracılığıyla paylaş


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 , , cpprestsdklibxml2ve yajlkullanan boost-systembir 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:

  1. 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 .
  2. Üst düzey bildirimin ile "default-features": falsebağ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-asioverilebilir.

"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:

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": trueiş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ük or 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" veya
VCPKG_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 veya
VCPKG_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 == "" ve
XBOX_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)"
}