英語で読む

次の方法で共有


vcpkg の概要

vcpkg は、Windows、macOS、および Linux で実行 、Microsoft と C++ コミュニティによって管理される無料のオープンソースの C/C++ パッケージ マネージャー。 これは C++ ツールであり、C++ スクリプトと CMake スクリプトを使用して記述されています。 これは、C/C++ ライブラリを管理することで、固有の問題点に対処するように設計されています。

vcpkg の理由

vcpkg の機能

ポートとトリプレット

vcpkg port は、パッケージを生成するバージョン管理されたビルド レシピです。 パッケージの最も一般的な種類は、ヘッダー、ソース コード、バイナリで構成される C/C++ ライブラリです。

tripletは、ターゲットのビルド環境 (cpu、os、コンパイラ、ランタイムなど) を 1 つの便利な名前でキャプチャします。 vcpkg は既定で 70 を超えるトリプレットを提供しますが、独自のトリプレットを定義することもできます。

システムにパッケージをインストールするために、vcpkg は CMake スクリプトであるポートのレシピ ファイルを実行します。 スクリプトには、ソース コードをダウンロードする手順や、システムでビルドを実行する手順が含まれている場合があります。 ビルド中、vcpkg はトリプレット内の情報を使用して、生成されたパッケージが目的の構成と一致することを確認します。

バイナリ キャッシュ

vcpkg は必要に応じてソースからライブラリをビルドしますが、ビルドされたパッケージは binary キャッシュにバックアップできます。 これにより、他の開発者マシンや継続的インテグレーション実行では、毎回新しいビルドを実行することなく、これらの事前構築済みパッケージを参照できます。 vcpkg は、キャッシュに適切なバイナリを含む有効な既存のパッケージが既に含まれているかどうかを確認することで、再構築が必要かどうかを判断します。

マニフェスト

直接依存関係を宣言し、オプションの機能またはバージョン制約を manifest ファイルに追加。 マニフェスト ファイルは、ソース管理システムにチェックインしてチームと共有できます。

バージョン管理

vcpkg には、 パッケージ バージョンを処理する独自の方法があります。 マニフェスト ファイルは、既定で 1 つのベースライン バージョン セットを参照できます。 ベースラインを使用すると、完全な再現性を備えた、手間のかからない、競合のない依存関係管理が可能になります。 さらに、個々のパッケージ バージョンをピン留めすることで、より高度な制御を引き続き行うことができます。

レジストリ

registry は、vcpkg ユーザーがインストールできるポートと使用可能なバージョンのコレクションです。 vcpkg には、既定でオープンソース ライブラリのキュレーションされたレジストリが用意されています。 カスタマイズ、パッチ、またはプライベート ライブラリ用に独自のレジストリを作成することもできます。

資産キャッシュ

資産キャッシュ では、vcpkg をエアギャップ環境とオフライン環境で動作させ、リモート ホストがダウンしたり侵害されたりした場合でもビジネスの継続性を確保できます。 ダウンロード ミラーを使用して、ソース コードやビルド ツールなどの資産をアップロードおよび復元します。

vcpkg と他のパッケージ マネージャーの比較

vcpkg と NuGet の比較

NuGet は、C/C++ 開発、特に .NET プロジェクトを含む MSBuild ソリューションでよく使用される .NET パッケージ マネージャーです。 一般に、Microsoft C++ チームでは、NuGet にはいくつかの制限があるため、C/C++ 開発に NuGet を使用することはお勧めしません。

  • コンパイルフレーバー。 NuGet はソースからすぐにパッケージをビルドできないため、すべてのユーザーに対して考えられるすべてのアプリケーション バイナリ インターフェイス (ABI) の制限に一致するように事前構築済みのバイナリを提供する必要があります。 ユーザーは、パッケージを正しくビルドする責任を負います。 また、関連するメタデータがないため、バイナリを区別することも困難です。 これにより、ユーザーはアーキテクチャ、オペレーティング システム、コンパイラの情報をパッケージ名に格納します。 パッケージの取得中にアーキテクチャ、OS、コンパイラの情報に制約を適用できないため、これは望ましくありません。
  • バイナリとソース。 NuGet は、比較的小さい事前構築済みバイナリを提供するように一から設計されています。 開発者は、ABI の互換性、パフォーマンス、整合性、デバッグ可能性を確保するために、ソース コードにアクセスできる必要があります。
  • NuGet PackageReference のサポートはありません。 NuGet PackageReference は、 .vcxproj ファイルではサポートされていません。C++ プロジェクトと .NET MSBuild プロジェクトの技術的およびアーキテクチャ上の違いにより、将来追加する予定はありません。 つまり、NuGet C++ ユーザーは、グローバル キャッシュの使用や、条件付きロジックにアクセスできる単純な MSBuild 用語での依存関係の参照などの機能の恩恵を受けることはありません。
  • 推移的 ABI 追跡。 vcpkg は、特定のパッケージの変更の影響を受けたオープンソースの依存関係を再構築します。 たとえば、Boost の新しい更新プログラムがリリースされた場合、vcpkg は Boost のすべての依存関係と Boost に依存するライブラリを再構築して、引き続き動作するようにします。 vcpkg リポジトリ内のライブラリを更新するためのプル要求は、ビルド時の競合に対処するまでマージされません。

vcpkg とシステム パッケージ マネージャーの比較

C/C++ ライブラリの取得と管理に使用できる Linux、macOS、Windows 用のさまざまなシステム パッケージ マネージャーがあります。 通常、これらのパッケージ マネージャーは、アプリケーションを管理するための優れた選択肢です。 しかし、サポートの一般的な性質のため、特に C/C++ 開発者にとって有益な機能を提供できないことがよくあります。 走行距離は異なりますが、一部のシステム パッケージ マネージャーはこれらの機能の一部を提供しますが、次の機能はすべて含まれていない場合があります。

  • 再頒布可能な開発者アセット: vcpkg は、デバッグに役立つ再頒布可能な開発者アセットを取得できます。
  • 事前構築済みパッケージとソースからのビルド: vcpkg は、カスタム要件に基づいてソースからパッケージをビルドできます。 事前構築済みの事前コンパイル済みパッケージを処理して動作させる必要はありません。
  • カタログ全体のバージョン管理: vcpkg を使用すると、個々のパッケージ バージョンをマイクロ管理するのではなく、互換性のあるパッケージのバージョン セットに依存できます。 必要に応じて引き続き実行できますが、既定のエクスペリエンスは簡単に開始できるように設計されています。
  • 1 つのシステム上の同じライブラリの複数のコピー: 同じ依存関係の複数のコピーを vcpkg を使用して同じシステムにインストールできますが、システム パッケージ マネージャーは、1 つのバージョンを 1 つのシステム全体の場所にインストールできます。 これは、ライブラリの異なるバージョンに応じて複数のプロジェクトがある場合に複雑になります。
  • カタログ サイズ: vcpkg は C/C++ 用に特化されているため、システム パッケージ マネージャーと比較して非常に大きな C/C++ ライブラリ コレクションを持ち、アクティブに維持されます。 一般に、C++ 開発に役立つ最新のライブラリが見つかる可能性が高くなります。
  • クロスプラットフォーム サポート: システム パッケージ マネージャーは、特定のシステムにロックされたパッケージを提供します。 複数のオペレーティング システムフレーバーをターゲットにする必要がある場合は、2 つ目のシステム用の別のパッケージ マネージャーを見つける必要があります。 これに対し、vcpkg はクロスプラットフォーム パッケージ マネージャーです。 そのため、必要に応じてターゲット ビルドを調整するだけです。

システム パッケージ マネージャーが絶対に理にかなっている状況があります。

  • システム パッケージ マネージャーは、そのシステムに固有のライブラリの提供と保守に適したジョブを実行する傾向があります
  • 使用しているプロジェクトに単純なビルド構成がある場合、事前構築済みパッケージは、そのシステムですぐに使用できます。
  • クロスプラットフォーム開発を行わない場合、システム パッケージ マネージャーでオペレーティング システムの互換性の問題が発生することはありません。

vcpkg はシステム パッケージ マネージャーと並行して動作するように設計されているため、依存関係ごとに最適なツールを自由に使用できます。

vcpkg の概要

vcpkg を試すには、入門チュートリアルを確認してください。

ビルド システムが CMake または MSBuild でない場合、vcpkg は好みの環境との人による統合もサポートします。