Share via


ホストの依存関係

ビルド時に他のポートでコードを生成したり、カスタム ビルド システムを実装したりするために使用されるツールは、vcpkg 内にパッケージ化できます。

Consuming

ツールとしてポートを使用する場合は、依存関係の "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 ビルドおよびインストールされます。

Note

コンシューマーは、メタデータ形式としてではなくCONTROL使用vcpkg.jsonする必要があります。 を使用してvcpkg format-manifest /path/to/CONTROL既存CONTROLのファイルを簡単に変換できます。

次に、コンシューマーのポートファイル (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-linuxx64-osx これらは、次の方法でオーバーライドできます。

  1. CMake ベースのマニフェスト モードで、最初project()のディレクティブの前に呼び出すset(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
  2. MSBuild ベースのマニフェスト モードで、プロパティを設定するVcpkgHostTriplet
  3. コマンド ラインで、フラグを使用する --host-triplet=...
  4. VCPKG_DEFAULT_HOST_TRIPLET 環境変数

生産

ツールの作成には特別な要件はありません。ツールは、すべての通常のポリシーとプラクティスに従って、標準ポートとして作成する必要があります。 特に、ポートファイルのコンテキスト内ではなくHOST_TRIPLET、 に対してTARGET_TRIPLETビルドする必要があります。

現在のコンテキストがクロスコンパイル (TARGET_TRIPLET ではない HOST_TRIPLET) の場合は、 VCPKG_CROSSCOMPILING 信頼できる値に設定されます。

if(VCPKG_CROSSCOMPILING)
    # This is a native build
else()
    # This is a cross build
endif()

ホスト専用ポート

一部のポートは、ホストの依存関係によってのみ依存する必要があります。スクリプト ポートとツール ポートが一般的な例です。 この場合は、supports 式を "native" 使用してこれを記述できます。 これは、式が false の場合 VCPKG_CROSSCOMPILING に true をサポートします (そのことを TARGET_TRIPLET == HOST_TRIPLET意味します)。