什麼是指令清單模式?
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/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
在指令清單模式中安裝套件
若要使用指令清單檔來安裝套件,請使用 vcpkg install
命令,而不需要任何套件自變數。
命令必須從包含指令清單 (vcpkg.json
) 檔案的目錄執行,或使用 選項提供 --x-manifest-root=<path>
之指令清單檔的路徑。
在指令清單模式中安裝的套件將不會安裝在全域 installed
目錄中,就像在傳統模式中一樣。 相反地,每個指令清單都會取得自己的安裝 vcpkg_installed
目錄; vcpkg_installed
目錄會建立在包含指令清單檔的相同目錄中。
每個指令清單都有獨立的安裝樹狀結構,可區分不同項目之間的相依性。 這會規避傳統模式的重要限制,只允許安裝每個埠的一個版本。 指令清單模式會保留每個專案分隔的埠版本。
在專案指令清單中使用功能
指令清單檔案可以透過使用 「功能」來定義附加的功能、行為和相依性集合。
在您的專案中,您可以定義功能,以啟用或停用套用至專案部分的相依性。 例如,如果您的專案包含多個元件,您可能會想要將一般相依性 "dependencies"
保留在清單中,但將一些其他元件限制為各自的元件。
若要啟用專案的功能,您可以使用下列其中一種方法:
- 將
--x-feature
選項傳遞至您的vpckg install
命令。 - 在 CMake 上,將 第一次呼叫 之前設定
VCPKG_MANIFEST_FEATURES
為project()
。 - 在 MSBuild 上,透過 'VcpkgAdditionalInstallOptions 傳遞
--x-feature
選項。
範例:專案指令清單中的功能
{
"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
下一步
以下是接下來要嘗試的一些工作:
- 完成指令清單模式教學 課程
vcpkg.json
讀取和vcpkg-configuration.json
參考文章。- 使用 版本設定鎖定您的可重複組建版本