主機相依性
其他埠用於建置時用來產生程式代碼或實作自定義建置系統的工具,可以封裝在 vcpkg 內。
使用埠做為工具時,您必須將相依性 "host"
字段設定為 true。 例如:
{
"name": "contoso-http-library",
"version-string": "1.0.0",
"description": "Contoso's http runtime library",
"dependencies": [
"contoso-core-library",
{
"name": "contoso-code-generator",
"host": true
},
{
"name": "contoso-build-system",
"host": true
}
]
}
在此情況下, contoso-code-generator
contoso-build-system
和 (包括任何可轉移的相依性)將會在建置之前 contoso-http-library
為主機三重組建置並安裝。
注意
取用者必須使用 vcpkg.json
而不是 CONTROL
作為其元數據格式。 您可以使用 輕鬆地轉換現有的 CONTROL
檔案 vcpkg format-manifest /path/to/CONTROL
。
然後,在取用者的 portfile 中(contoso-http-library
在此範例中),CMake 變數 CURRENT_HOST_INSTALLED_DIR
會定義為 installed/<host-triplet>
,並應該用來尋找任何必要的資產。 在此範例中, contoso-code-generator
可能已安裝 tools/contoso-code-generator/ccg.exe
取用者會透過下列方式新增至其本機路徑:
# ports/contoso-http-library/portfile.cmake
vcpkg_add_to_path(${CURRENT_HOST_INSTALLED_DIR}/tools/contoso-code-generator)
預設主機三胞胎會根據主機架構和作業系統來選擇,例如 x64-windows
、 x64-linux
或 x64-osx
。 您可以透過下列方式覆寫它們:
- 在 CMake 型指令清單模式中,在第一個
project()
指示詞之前呼叫set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
- 在 MSBuild 型指令清單模式中
VcpkgHostTriplet
,設定 屬性 - 在命令行上,透過旗標
--host-triplet=...
VCPKG_DEFAULT_HOST_TRIPLET
環境變數
產生工具沒有特殊需求:工具應撰寫為標準埠,並遵循所有一般原則和做法。 值得注意的是,它們應該根據 TARGET_TRIPLET
來建置 ,而不是 HOST_TRIPLET
在其 portfile 的內容中。
如果目前的內容是交叉編譯 (TARGET_TRIPLET
不是 HOST_TRIPLET
),則會 VCPKG_CROSSCOMPILING
設定為真值。
if(VCPKG_CROSSCOMPILING)
# This is a native build
else()
# This is a cross build
endif()
某些埠應該只依賴透過主機相依性;腳本埠和工具埠是常見的範例。 在此情況下,您可以使用 "native"
supports表示式來描述這一點。 當 為 false 時 VCPKG_CROSSCOMPILING
,這支援表達式為 true(表示該 TARGET_TRIPLET == HOST_TRIPLET
運算式)。
將此 CMake 選項設定為將 vcpkg 所建置的可執行檔案新增至 CMAKE_PROGRAM_PATH
。
並在建置程式期間提供它們。
若要讓這個選項生效,您必須在檔案CMakeLists.txt
中的任何呼叫project()
之前設定它。 VCPKG_HOST_TRIPLET
也必須設定變數。
只有安裝在 tools
主機三重項資料夾中 的工具會新增至 CMAKE_PROGRAM_PATH
。
實際上,會新增下列位置:
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools/*/bin