Share via


マニフェスト モードとは

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" 保持し、他の一部をそれぞれのコンポーネントに制限することができます。

プロジェクトの機能を有効にするには、次のいずれかの方法を使用できます。

例: プロジェクト マニフェストの機能

{
  "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

次のステップ

次に試すタスクを次に示します。