如需搭配 vcpkg 使用資訊清單的概觀,請參閱
資訊清單模式
。
資訊清單是嚴格的
JSON
檔。 它們不能包含 C++樣式批註,
//
() 或尾端逗號。 不過,您可以使用開頭為
$
的功能變數名稱,在具有一組妥善定義的索引鍵的任何物件中撰寫批註。 任何允許使用者定義索引鍵的物件都不允許這些批註欄位 (,例如
"features"
) 。
最新的 JSON 架構位於
https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json
。 具有 JSON 架構支援的 IDE,例如 Visual Studio 和 Visual Studio Code可以使用這個檔案來提供自動完成和語法檢查。 對於大部分的 IDE,您應該將 中的
vcpkg.json
設定
"$schema"
為此 URL。
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"dependencies": [
"boost-system",
"name": "cpprestsdk",
"default-features": false
"libxml2",
"yajl"
此範例示範使用
boost-system
、
cpprestsdk
libxml2
和
yajl
的應用程式資訊清單。 此範例也包含參考
$schema
,以啟用更佳的 IDE 驗證和自動完成。
最上層欄位
"builtin-baseline"
指定預設登錄中版本解析的快捷方式
"baseline"
。 字串。 選擇性,僅供最上層專案使用。
此欄位指出的認可
https://github.com/microsoft/vcpkg
,其會為您的資訊清單提供全域最低版本資訊。 最上層資訊清單檔案需要使用版本設定,而不需指定
"default-registry"
。 其語意與定義預設登錄的語意相同::
"default-registry": {
"kind": "builtin",
"baseline": "<value>"
如需更多語
意詳細資料
,請參閱
版本設定
和使用登錄。
"default-features"
合理行為所需的一組功能,不需要額外的自訂。
如果下列其中一項,系統會自動選取預設功能:
埠的埠對埠相依性具有
"default-features": true
-- 預設值。
最上層資訊清單沒有與
"default-features": false
通訊埠相依性。
預設功能會處理為最上層專案可能不知道的可轉移相依性提供「預設」設定的特定案例。 其他人所使用的埠應該幾乎一律用於
"default-features": false
其相依性。
如需功能的詳細資訊,請參閱
"features"
。
"description"
埠的描述。 字串或字串陣列。 程式庫的必要專案,最上層專案的選擇性專案。
這可用來協助使用者探索程式庫作為 或
find
命令的一
search
部分,並瞭解程式庫的功能。
"dependencies"
專案所需的相依性清單。
Dependency 物件的
陣列。 選擇性。
此欄位會列出建置和使用程式庫或應用程式所需的所有相依性。
"dependencies": [
"name": "arrow",
"default-features": false,
"features": [ "json" ]
"boost-asio",
"openssl",
"name": "picosha2",
"platform": "!windows"
"documentation"
上游專案檔案的 URI。 字串。 選擇性。
"features"
專案使用者可用的 功能 。 名稱對應至 Feature 物件。 選擇性。
功能是布林值旗標,可將其他行為和相依性新增至組建。 如需功能的詳細資訊,請參閱 資訊清單概念檔 。
"homepage"
專案首頁的 URI。 字串。 選擇性。
"license"
專案的 SPDX 簡短授權運算式。 字串或 Null。 選擇性。
"license"
應該是SPDX 3.19 授權運算式,或應該 null
指出使用者必須讀取已部署的 /share/<port>/copyright
檔案。 不支援 DocumentRefs。
範例授權字串
LGPL-2.1-only AND BSD-2-Clause
GPL-2.0-or-later WITH Bison-exception-2.2
vcpkg 會使用下列 EBNF 來剖析授權欄位:
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"
套件維護人員的清單。 字串或字串陣列。 選擇性。
建議您使用 「Givenname Surname<email> 」 格式。
"name"
專案的名稱。 字串。 程式庫的必要專案,最上層專案的選擇性專案。
名稱必須是小寫 ASCII 字母、數位或連字號, -
() 。 它不得以連字號開頭或結尾。 建議程式庫將其組織或架構名稱納入為前置詞,例如 msft-
或 boost-
,以協助使用者尋找並描述相關聯的程式庫。
例如,具有正式名稱 Boost.Asio
的程式庫可能會指定名稱 boost-asio
。
"overrides"
要用於特定相依性的確切版本針腳。 Override 物件的陣列。 選擇性。
"overrides"
從可轉移的資訊清單 (,也就是忽略相依性) 。 只會使用最上層專案所定義的覆寫。
"port-version"
版本尾碼,區分封裝檔案的修訂。 整數。 預設值為 0
。
"port-version"
每當發佈未變更上游來源版本的埠時,應該遞增 。 當上游來源版本變更時, 版本欄位 應該變更,而且 "port-version"
應該重設為 0
(或移除) 。
如需詳細資訊,請參閱 版本控制 。
"supports"
支援的平臺和組建組態。 平臺運算式。 選擇性。
此欄位記載專案預期無法在特定平臺組態上順利建置或執行。
例如,如果您的程式庫不支援針對 Linux 建置,您會使用 "supports": "!linux"
。
"vcpkg-configuration"
允許在檔案內嵌 vcpkg 組 vcpkg.json
態屬性。 屬性內 vcpkg-configuration
的所有專案都會被視為在檔案中 vcpkg-configuration.json
定義。 如需詳細資訊,請參閱 vcpkg-configuration.json
檔。
vcpkg-configuration
在 中 vcpkg.json
定義 ,同時不允許檔案, vcpkg-configuration.json
且會導致 vcpkg 命令終止並出現錯誤訊息。
"name": "test",
"version": "1.0.0",
"dependencies": [ "beison", "zlib" ],
"vcpkg-configuration": {
"registries": [
"kind": "git",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"repository": "https://github.com/northwindtraders/vcpkg-registry",
"packages": [ "beicode", "beison" ]
"overlay-ports": [ "./my-ports/fmt",
"./team-ports"
"version"
, "version-semver"
, "version-date"
, "version-string"
上游專案的版本。 字串。 程式庫的必要專案,最上層專案的選擇性專案。
資訊清單最多必須包含一個版本欄位。 每個版本欄位都對應至不同的版本設定 配置:
"version"
- 寬鬆 語意 2.0.0版,允許大於或小於 3 個主要數位。 範例: 1.2.3.4.10-alpha1
"version-semver"
- 嚴格 語意 2.0.0版。 範例: 2.0.1-rc5
"version-date"
- 格式化為 YYYY-MM-DD
的日期,具有選擇性的尾端點分隔數值序列。 用於沒有數值版本的套件 (,例如 Live-at-HEAD) 。 範例: 2022-12-09.314562
"version-string"
- 任一字元串。 用於沒有可排序版本的套件。 這應該很少使用,不過引進其他版本欄位之前建立的所有埠都會使用此配置。
如需詳細資訊,請參閱 版本控制 。
相依性欄位
每個相依性都是字串或具有下欄欄位的物件:
相依性: "default-features"
布林值,表示專案相依于相依性之「依預設」功能。 預設值為 true
。
在大部分情況下,這應該定義為 false
,而且任何必要的功能都應該明確相依。
相依性: "features"
需要的其他功能清單。 字串的陣列。 選擇性。
"name": "ffmpeg",
"default-features": false,
"features": [ "mp3lame" ]
使用連結 ffmpeg
庫,但只需要 mp3 編碼支援。
相依性: "host"
布林值,表示必須針對 主機三重專案 建置相依性,而不是目前埠的 triplet。 預設值為 false
。
提供建置 (期間應「執行」之工具或腳本的任何相依性,例如建置系統、程式碼產生器或協助程式,) 應標示為 "host": true
。 這可在目標不是可執行檔情況下啟用正確的跨編譯,例如針對 進行編譯 arm64-android
時。
如需詳細資訊,請參閱 主機相依性 。
相依性: "name"
相依性的名稱。 字串。 必要。
這會遵循與 "name"
專案屬性相同的限制。
運算式,限制需要相依性的平臺。 平臺運算式。 選擇性。
如果運算式不符合目前的組態,將不會使用相依性。 例如,如果相依性具有 "platform": "!windows"
,則只有在以非 Windows 系統為目標時才需要它。
相依性: "version>="
相依性的最低版本條件約束。
此欄位會指定相依性的最低版本,並視需要選擇性地使用 #N
尾碼來指定最小埠版本。
如需版本設定語意的詳細資訊,請參閱 版本設定。
每項功能都是具有下欄欄位的物件:
"$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"
功能: "dependencies"
功能所需的相依性清單。 Dependency 物件的陣列。 選擇性。
此欄位會列出建置和使用此功能所需的任何其他相依性。
功能: "description"
功能的描述。 字串或字串陣列。 必要。
這可用來協助使用者探索 功能作為 或 find
命令的一 search
部分,並瞭解此功能的功能。
功能: "supports"
此功能支援的平臺和組建 組態。 平臺運算式。 選擇性。
此欄位會記錄功能將建置並成功執行的平臺組態。
平臺運算式是 JSON 字串,描述何時需要相依性,或預期建置程式庫或功能時。
運算式是從基本識別碼、邏輯運算子和群組建置的:
!<expr>
, not <expr>
- 負
<expr>|<expr>
、 、 <expr>||<expr>
<expr>,<expr>
、 <expr> or <expr>
- 邏輯 OR
<expr>&<expr>
、 、 <expr>&&<expr>
<expr> and <expr>
- 邏輯 AND
(<expr>)
- 群組/優先順序
下列識別碼會根據 三重設定 和組建組態來定義:
windows
VCPKG_CMAKE_SYSTEM_NAME
== ""
或 或 VCPKG_CMAKE_SYSTEM_NAME
== "WindowsStore"
VCPKG_CMAKE_SYSTEM_NAME
== "MinGW"
mingw
VCPKG_CMAKE_SYSTEM_NAME
== "MinGW"
VCPKG_CMAKE_SYSTEM_NAME
== "WindowsStore"
linux
VCPKG_CMAKE_SYSTEM_NAME
== "Linux"
VCPKG_CMAKE_SYSTEM_NAME
== "Darwin"
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"
static
VCPKG_LIBRARY_LINKAGE
== "static"
static-crt
VCPKG_CRT_LINKAGE
== "static"
native
TARGET_TRIPLET
== HOST_TRIPLET
非 Windows 上的 sha256 需求 picosha2
,但可從 Windows (BCrypt) 上的作業系統取得
"name": "picosha2",
"platform": "!windows"
在 arm64 Windows 和 amd64 Linux 上要求 zlib
"name": "zlib",
"platform": "(windows & arm64) | (linux & x64)"