什麼是指令清單模式?

vcpkg 有兩種作業模式: 傳統模式 和指令清單模式。 對於大部分的用戶,我們重新認可指令清單模式。

指令清單模式會使用宣告式 JSON 檔案來描述專案或套件的相關元數據。 在任何情況下,此檔案的名稱都是 vcpkg.json

指令清單模式是在工作目錄中有指令清單檔案 (vcpkg.json) 時執行 vcpkg install 命令來參與。 如需如何在 指令清單模式中安裝套件的詳細資訊,請繼續閱讀。

指令清單模式也需要使用進階功能,例如 版本設定自定義登錄

埠中的指令清單檔案

所有 vcpkg 埠都必須包含 vcpkg.json 描述所安裝套件元數據的檔案。

vcpkg 會針對各種用途使用套件指令清單中的元數據,例如計算相依性樹狀結構、依名稱或描述搜尋套件、解析功能等。

套件指令清單範例

{
  "name": "fmt",
  "version": "10.1.1",
  "description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
  "homepage": "https://github.com/fmtlib/fmt",
  "license": "MIT",
  "dependencies": [
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

專案中的指令清單檔案

在您的專案中使用指令清單檔的主要目的是宣告相依性。 使用專案指令清單時,您可以指定版本條件約束和覆寫來鎖定特定相依性版本。 這項功能不適用於傳統模式。

專案指令清單範例

{
  "dependencies": [ "fmt", "zlib" ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "zlib", "version": "1.2.8" }
  ]
}

組態檔

vcpkg 可以透過 vcpkg-configuration.json 檔案來設定,以新增更多 套件登錄重疊埠和三胞胎 位置。

組態檔範例

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/northwindtraders/vcpkg-registry",
      "baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
      "packages": [ "beicode", "beison" ]
    }
  ],
  "overlay-ports": [
    "C:\\dev\\my_vcpkg_ports"
  ]
}

在指令清單模式中安裝套件

若要使用指令清單檔來安裝套件,請使用 vcpkg install 命令,而不需要任何套件自變數。 命令必須從包含指令清單 (vcpkg.json) 檔案的目錄執行,或使用 選項提供 --x-manifest-root=<path> 之指令清單檔的路徑。

在指令清單模式中安裝的套件將不會安裝在全域 installed 目錄中,就像在傳統模式中一樣。 相反地,每個指令清單都會取得自己的安裝 vcpkg_installed目錄; vcpkg_installed 目錄會建立在包含指令清單檔的相同目錄中。

每個指令清單都有獨立的安裝樹狀結構,可區分不同項目之間的相依性。 這會規避傳統模式的重要限制,只允許安裝每個埠的一個版本。 指令清單模式會保留每個專案分隔的埠版本。

在專案指令清單中使用功能

指令清單檔案可以透過使用 「功能」來定義附加的功能、行為和相依性集合。

在您的專案中,您可以定義功能,以啟用或停用套用至專案部分的相依性。 例如,如果您的專案包含多個元件,您可能會想要將一般相依性 "dependencies" 保留在清單中,但將一些其他元件限制為各自的元件。

若要啟用專案的功能,您可以使用下列其中一種方法:

範例:專案指令清單中的功能

{
  "name": "my-game",
  "dependencies": [ "grpc" ],
  "features": {
    "client": {
      "description": "client game executable",
      "dependencies": [ "sdl2", "bullet3" ]
    }, 
    "server": {
      "description": "multiplayer server executable",
      "dependencies": [ "proxygen" ]
    }, 
    "tests": {
      "description": "development tests",
      "dependencies": [ "gtest" ]
    }
  }
} 

若要只建置「用戶端」元件的相依性,請執行:

vcpkg install --x-feature=client

下一步

以下是接下來要嘗試的一些工作: