【Visual Studio/C++】vcpkgでパッケージを管理する
Visual StudioのC++のプロジェクトでvcpkgを使ってパッケージ(ライブラリ)を管理したい!
概要
今回の記事では、Visual StudioのC++のプロジェクトでvcpkgを使ってパッケージ(ライブラリ)を管理する手順を掲載する。
Node.jsのnpm、Rubyのgem、C#だとNuGetという感じで今どきの開発環境ではてパッケージマネージャーを使ってパッケージやらライブラリを管理するのが主流になってるんだけども、C++でもパッケージマネージャーを使いたい!
C++のパッケージマネージャーはいくつか候補があって、今回はVisual Studioで使えるvcpkgを導入してみる。
仕様書
環境
- Visual Studio Community 2022 (64 ビット): Version 17.12.3
- vcpkg: 2024-09-30-ab8988503c7cffabfd440b243a383c0a352a023d
手順書
Microsoftのチュートリアルを参考にしつつ、Visual Studioでvcpkgが使えるようにする。
チュートリアルの内容そのままでは、日本語の環境の影響?でそのままビルドできなかったりしたのでところどころ内容を変更してる。
「環境構築編」と「プロジェクト設定編」の2部構成です。
環境構築編
まずはvcpkgのインストールから。
MicrosoftのチュートリアルではGitを使ってvcpkgをインストールしてるんだけども、Visual Studio Installerでもインストールできるのでこの記事はVisual Studio Installerを使う。
右の「インストールの詳細」の中の「C++によるデスクトップ開発」->「オプション」->「vcpkgパッケージマネージャー」にチェックを入れて、右下の「変更」をクリックしてインストールする。
というか私の環境では標準で「vcpkgパッケージマネージャー」にチェックが入ってた。おそらくVisual Studioのインストール時にワークロードの「C++によるデスクトップ開発」を選択してるとデフォルトでvcpkgが含んでるんだと思われ。
vcpkgのインストールが終わったら、次に環境変数を設定してvcpkgにパスを通す。
チュートリアルではターミナルでコマンドを実行してパスを通してるんだけども、それだと毎回コマンドを自校しなくてはならなくなるので環境変数に設定する。
私の環境ではvcpkgは下記のパスに保管されてた。
C:Program FilesMicrosoft Visual Studio2022CommunityVCvcpkgvcpkg.exe
vcpkg.exe
が保管されてるディレクトリまでのパスを通す。環境変数VCPKG_ROOT
にパスを保管して、PATH
で呼び出す感じ。
名前 | 値 |
---|---|
VCPKG_ROOT |
C:Program FilesMicrosoft Visual Studio2022CommunityVCvcpkg |
PATH |
%VCPKG_ROOT%;%PATH% |
また、私の環境ではシステム環境変数のPATH
がパンパンでこれ以上追加できなかったので、ユーザー環境変数PATH
の方に設定した。
Microsoftのチュートリアルのようにターミナルから一時的に環境変数を設定する場合はこう。
set VCPKG_ROOT="C:Program FilesMicrosoft Visual Studio2022CommunityVCvcpkg"
set PATH=%VCPKG_ROOT%;%PATH%
パスを通したら下記のコマンドを実行して、Visual Studioがvcpkgを認識できるようにする。
vcpkg integrate install
このコマンドを実行しないとVisual StudioでC++のプロジェクトのプロパティにvcpkg関連のオプションが表示されないので、必ずこのコマンドを実行する。
プロジェクト設定編
お試しでコンソール向けのC++のプロジェクトでvcpkgを使ってみる。
言語を「C++」で絞り込んで表示表示される「コンソールアプリ」でプロジェクトを作成する。
プロジェクト名vcpkg_test
として、下記のパスにプロジェクトが保管されてるとして話を進める。
C:workspacesvcpkg_test
プロジェクトでvcpkgを使えるように設定する必要がある。
プロジェクトができたらまず、プロジェクトのルートディレクトリーでコマンドを実行して、vcpkgのマニフェストファイルを作成する。
vcpkg new --application
コマンドを実行するとプロジェクトのルートディレクトリーにvcpkg.json
が作成されて、ここにライブラリーの依存関係などが保管されていく。
試しにfmt
というライブラリーをインストールしてみる。
vcpkg add port fmt
正常にfmt
がインストールされるとvcpkg.json
は下記のような感じになる。
{
"dependencies": [
"fmt"
]
}
次にVisual Studioでプロジェクトのプロパティを開く。
「構成プロパティ」「vcpkg」の中の「Use Vcpkg Manifest」の項目を「はい」とする。
もし、「構成プロパティ」に「vcpkg」の項目が表示されてない場合は、環境構築編のvcpkg integrate install
のコマンドが正常に実行されてない可能性がある。
「構成プロパティ」「C/C++」「コマンドライン」の中の「追加のオプション」に/utf-8
と入力する。
日本語などの環境ではオプション/utf-8
を追加しないとstatic_assert failed: 'Unicode support requires compiling with /utf-8'
とエラーメッセージが表示されてコンパイルできないので注意。
vcpkg_test.cpp
でfmt
を使ってみる。
#include <fmt/core.h>
int main()
{
fmt::print("Hello World!");
}
コンパイルを実行する前は
こんな感じでfmt
が名前解決できてないが、コンパイルすると名前解決される。
コンパイル後にこのプログラムを実行して
Hello World!
こんな感じでコンソールに表示されれはOKだ!
まとめ(感想文)
他の言語環境でパッケージマネージャーに苦しめられることもあったけども、あると便利だと思う今日この頃。