次の方法で共有


ヘルパー ポートの作成

ヘルパー ポートはスクリプト ポートとも呼ばれ、ビルド プロセス中に使用する他のポートの関数を公開します。 たとえば、ポートは vcpkg-cmake 、他のポートが vcpkg_cmake_configure() 使用する関数を定義します。 一般的なスクリプトをヘルパー ポートにパッケージ化することで、メイン更新を 1 か所で行うことができるので、より効率的になります。 さらに、ヘルパー ポートをバージョン管理し、通常のポートと同じメカニズムを使用して依存できます。

どのように機能しますか?

ヘルパー ポートは拡張メカニズムを vcpkg-port-config.cmake 介して実装されます。

ポートが実行される前に、vcpkg は、実行されるポートの直接の依存関係によってエクスポートされたすべてのファイルをインポート vcpkg-port-config.cmake します。

ヘルパー ポートが別のヘルパー ポートに依存している場合は、依存関係のファイルを明示的にインポートする vcpkg-port-config.cmake 必要があります。 ヘルパーからヘルパー へのポートの依存関係はホスト依存関係としてマークしないでください。これにより、1 つのスクリプトが同じインストール ディレクトリ内にある他のスクリプトに依存できるようになります。

ヘルパー ポートに依存するポートは、依存関係をホスト依存関係としてマークする必要があります。

ヘルパー ポートは、常にインストール vcpkg-port-config.cmake ツリーのサブディレクトリにshare/${PORT}ファイルをインストールする必要があります。

例: 単純なヘルパー ポートを記述する

1 - ヘルパー関数を定義する CMake ファイルを作成します。

my-helper/my_helper_function.cmake

include_guard(GLOBAL)

function(my_helper_function)
  message(STATUS "my_helper_function() was called")
  my_other_helper_function()
endfunction()

include_guard(GLOBAL)ファイルの上部には、ファイルが複数回含まれている場合に、この関数の再定義を防ぎ保護します。

次の行では、メッセージを表示し、別のヘルパー ポートで定義されている関数をmy_other_helper_function呼び出す名前my_helper_functionの関数を宣言します。

2 - ヘルパー ポートのファイルを porftile.cmake 作成する

my-helper/portfile.cmake

set(VCPKG_POLICY_HELPER_PORT enabled)

file(INSTALL
  "${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake"
  DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")

file(INSTALL "${VCPKG_ROOT_DIR}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)

このポリシーをVCPKG_POLICY_HELPER_PORT有効にすると、vcpkg はヘルパー ポートに特に適用されるビルド後のチェックを有効にします。 具体的には、正しいパスにインストールされ、vcpkg-port-config.cmakeディレクトリにファイルがインストールされていないincludeチェック。

次の行では、必要な vcpkg-port-config.cmake ファイルと copyright ファイルが正しい場所 (share/${PORT}) にインストールされます。

3 - ヘルパー ポートのファイルを vcpkg.json 作成する

my-helper/vcpkg.json

{
  "name": "my-helper",
  "version-date": "2024-03-20",
  "description": "Provide my_helper_function()",
  "license": "MIT",
  "dependencies": [ 
    { "name": "my-other-helper" } 
  ]
}

ヘルパー ポートのバージョン管理スキームとして使用version-dateすることをお勧めします。

dependenciesこの例では、という名前my-other-helperの別のヘルパー ポートへの参照が含まれています。 依存関係は、ヘルパーからヘルパーへのポートの依存関係であるため、意図的にホストの依存関係としてマークされません。

4 - ヘルパー ポートのファイルを vcpkg-port-config.cmake作成する

my-helper/vcpkg-port-config.cmake

include_guard(GLOBAL)

include("${CMAKE_CURRENT_LIST_DIR}/../my-other-helper/vcpkg-port-config.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/my_helper_function.cmake")

ファイルは vcpkg-port-config.cmake 3 行で構成されます。1 行目は、ファイルが複数回含まれるのを防ぐグローバル インクルード ガードです。

2 行目には、 my-other-helper/vcpkg-port-config.cmake 直接依存関係の my-other-helper 一覧に含める必要なく、 my-helper 依存するポートで関数を使用できるようにする機能が含 my-other-helper まれています。

最後に、定義を my_helper_function.cmake 含むファイルが my_helper_function 含まれます。

5 - マニフェストで使用 my-helper する

すべてのコンシューマーは my-helper 、それ自体への直接の依存関係のみを my-helper 含める必要があり、依存関係 my-other-helper は必要ありません。 使用するマニフェストは、依存関係をホスト依存関係としてマークする必要があります。

my-port/vcpkg.json

{
  "name": "my-port",
  "version": "1.0.0",
  "dependencies": [
    {
      "name": "my-helper",
      "host": true
    }
  ]
}

これにより、 my_helper_function 次の機能を my-port/portfile.cmake使用できます。

my-port/portfile.cmake

my_helper_function()