ヘルパー ポートの作成
ヘルパー ポートはスクリプト ポートとも呼ばれ、ビルド プロセス中に使用する他のポートの関数を公開します。 たとえば、ポートは 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()
vcpkg