マニフェスト モードとは
vcpkg には、クラシック モードとマニフェスト モードの 2 つの操作モードがあります。 ほとんどのユーザーに対して、マニフェスト モードを再コミットしました。
マニフェスト モードでは、宣言型 JSON ファイルを使用して、プロジェクトまたはパッケージに関するメタデータを記述します。 いずれの場合も、このファイルの名前は vcpkg.json
.
マニフェスト モードは、作業ディレクトリにマニフェスト ファイル (vcpkg.json
) がある間にコマンドを実行vcpkg install
することによって実行されます。 マニフェスト モードでパッケージをインストールする 方法の詳細については、先に読んでください。
マニフェスト モードは、バージョン管理やカスタム レジストリなどの高度な機能を使用するためにも必要です。
ポート内のマニフェスト ファイル
すべての vcpkg ポートには、 vcpkg.json
インストールするパッケージに関するメタデータを記述するファイルが含まれている必要があります。
vcpkg は、依存関係ツリーの計算、名前または説明によるパッケージの検索、機能の解決など、さまざまな目的でパッケージ マニフェスト内のメタデータを使用します。
パッケージ マニフェストの例
{
"name": "fmt",
"version": "10.1.1",
"description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
"homepage": "https://github.com/fmtlib/fmt",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
プロジェクト内のマニフェスト ファイル
プロジェクトでマニフェスト ファイルを使用するメインの目的は、依存関係を宣言することです。 プロジェクト マニフェストを使用する場合は、バージョンの制約とオーバーライドを指定して、依存関係の特定のバージョンをロックできます。 この機能は、クラシック モードでは使用できません。
プロジェクト マニフェストの例
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
構成ファイル
vcpkg は、パッケージ レジストリを追加したり、ポートとトリプレットの場所をオーバーレイしたりするために、ファイルを介してvcpkg-configuration.json
構成できます。
構成ファイルの例
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/northwindtraders/vcpkg-registry",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
マニフェスト モードでのパッケージのインストール
マニフェスト ファイルを使用してパッケージをインストールするには、パッケージ引数を指定せずにコマンドを使用 vcpkg install
します。
コマンドは、マニフェスト (vcpkg.json
) ファイルを含むディレクトリ、またはオプションを使用して提供されるマニフェスト ファイルへのパスから実行する --x-manifest-root=<path>
必要があります。
マニフェスト モードでインストールされたパッケージは、クラシック モードの場合と同様にグローバル installed
ディレクトリにはインストールされません。 代わりに、各マニフェストは独自のインストール ディレクトリを vcpkg_installed
取得します vcpkg_installed
。ディレクトリは、マニフェスト ファイルを含む同じディレクトリに作成されます。
マニフェストごとに独立したインストール ツリーを使用すると、異なるプロジェクト間で依存関係を分離できます。 これにより、クラシック モードの重要な制限が回避され、各ポートの 1 つのバージョンのみをインストールできます。 マニフェスト モードでは、プロジェクトごとに分離されたポートのバージョンが保持されます。
プロジェクト マニフェストでの機能の使用
マニフェスト ファイルでは、"機能" を使用して、機能、動作、依存関係の追加セットを定義できます。
プロジェクトでは、プロジェクトの一部に適用される依存関係を有効または無効にする機能を定義できます。 たとえば、プロジェクトに複数のコンポーネントが含まれている場合は、一覧に共通の依存関係を "dependencies"
保持し、他の一部をそれぞれのコンポーネントに制限することができます。
プロジェクトの機能を有効にするには、次のいずれかの方法を使用できます。
- コマンドに
--x-feature
オプションをvpckg install
渡します。 - CMake では、最初の呼び出し
project()
の前にVCPKG_MANIFEST_FEATURES
. - MSBuild では、'VcpkgAdditionalInstallOptions を使用してオプションを渡
--x-feature
します。
例: プロジェクト マニフェストの機能
{
"name": "my-game",
"dependencies": [ "grpc" ],
"features": {
"client": {
"description": "client game executable",
"dependencies": [ "sdl2", "bullet3" ]
},
"server": {
"description": "multiplayer server executable",
"dependencies": [ "proxygen" ]
},
"tests": {
"description": "development tests",
"dependencies": [ "gtest" ]
}
}
}
"クライアント" コンポーネントの依存関係のみをビルドするには、次のコマンドを実行します。
vcpkg install --x-feature=client
次のステップ
次に試すタスクを次に示します。
- マニフェスト モードのチュートリアルを完了する
- を読み取り、
vcpkg.json
vcpkg-configuration.json
リファレンス記事を参照してください。 - バージョン管理を使用して 反復可能なビルドのバージョンをロックダウンする
vcpkg
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示