【ブイシーパッケージ】

vcpkg とは?

最終更新:
💡 C/C++の依存ライブラリを、設定と一緒に管理する

MicrosoftとC++コミュニティが保守するC/C++用のパッケージマネージャー。依存ライブラリの宣言、対象環境を示すTriplet、CMake連携、バージョンとビルド済みキャッシュの管理を解説します。

📌 このページのポイント
vcpkg:C/C++の依存関係を管理vcpkg.json に宣言dependencies:fmt・zlibプロジェクトのマニフェストvcpkg install依存関係を解決して取得・ビルド条件に合うキャッシュは再利用対象構成向けのライブラリCMakeなどとは連携設定を行うバージョンの基準・Tripletに加えてOS・コンパイラ・ビルド設定もそろえる
マニフェストモードの導入の流れです。宣言ファイルだけで環境全体を固定するものではありません。必要なビルドツールと、各ライブラリの対応条件も確認します。
ひよこ ひよこ
C++のライブラリを入れるとき、何をしてくれるの?
ペンギン先生 ペンギン先生
ライブラリを導入するための定義を使って、依存関係を解決し、必要な取得やビルドを進めるよ。条件に合うビルド済みキャッシュがあれば、それを再利用できる。必要なコンパイラやビルドツールの準備まで不要になるわけではないんだ。
ひよこ ひよこ
プロジェクトで使うライブラリは、どこに書くの?
ペンギン先生 ペンギン先生
推奨されるマニフェストモードでは、vcpkg.jsonのdependenciesに書くよ。たとえばfmtとzlibを宣言し、そのファイルのある場所で vcpkg install を実行する。ライブラリ名をコマンドに並べるクラシックモードとは使い方が違うんだ。
ひよこ ひよこ
同じファイルを渡せば、同じ環境になる?
ペンギン先生 ペンギン先生
依存関係を共有する大切な材料にはなるよ。ただしバージョンの基準となるbuiltin-baselineや、必要ならoverridesなども考える。さらにコンパイラ・OS・ビルド設定も結果に関わるので、vcpkg.jsonだけで環境全体が同一になるとは言えないんだ。
ひよこ ひよこ
Tripletは何?
ペンギン先生 ペンギン先生
対象の構成をまとめて表す名前だよ。たとえば x64-windows のようなものがある。CPUやOSに加え、ライブラリを静的にリンクするか動的にリンクするかなどの設定も関係する。ライブラリがその構成をサポートするか確認しよう。
ひよこ ひよこ
CMakeなら、勝手にライブラリが見つかる?
ペンギン先生 ペンギン先生
vcpkgのツールチェインファイルをCMakeに設定すると、find_packageなどが導入先を検索できるようになるよ。マニフェストの依存ライブラリを自動導入する連携もある。入れるだけでどのプロジェクトにも自動設定される、という意味ではないんだ。
もっと詳しく知りたい人へ

ビルド済みキャッシュは、違う環境でも必ず使える?

vcpkgは必要なパッケージと構成に合うキャッシュを再利用し、合わなければソースからのビルドが必要になります。キャッシュがあるだけで、CPU・コンパイラ・設定の異なる成果物が互換になるわけではありません。キャッシュの保管先や共有権限も管理します。

Conanと比べて、Windowsなら必ずvcpkgがよい?

OSだけで優劣を決めることはできません。必要なライブラリ、社内での配布方法、バージョン管理、使うビルドシステム、既存の運用などで判断します。vcpkgにもビルド済みキャッシュがあり、キャッシュの有無だけで両者を分けることはできません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「vcpkg」って出てきたら「C/C++の依存ライブラリを管理する道具」と思えばだいたいOK!
📖 おまけ:英語の意味
「vcpkg」 = C/C++のパッケージ管理ツールの名前
💬 MicrosoftとC++コミュニティが保守しています。Windowsだけの道具ではなく、LinuxやmacOSも対象です。

参考資料

← 用語集にもどる