主機相依性

其他埠用於建置時用來產生程式代碼或實作自定義建置系統的工具,可以封裝在 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)

指定 Host Triplet

預設主機三胞胎會根據主機架構和作業系統來選擇,例如 x64-windowsx64-linuxx64-osx。 您可以透過下列方式覆寫它們:

  1. 在 CMake 型指令清單模式中,在第一個project()指示詞之前呼叫set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
  2. 在 MSBuild 型指令清單模式中 VcpkgHostTriplet ,設定 屬性
  3. 在命令行上,透過旗標 --host-triplet=...
  4. 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運算式)。

VCPKG_USE_HOST_TOOLS

將此 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