相关文章推荐
想出国的烈马  ·  Non HTTP response ...·  1 年前    · 
道上混的领结  ·  python tkinter timer ...·  1 年前    · 

如需搭配 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"

    運算式,限制需要相依性的平臺。 平臺運算式。 選擇性。

    如果運算式不符合目前的組態,將不會使用相依性。 例如,如果相依性具有 "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)"