【Visual Studio/C++】vcpkgでパッケージを管理する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Visual Studio/C++】vcpkgでパッケージを管理する

2024-10-7 | ,

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.cppfmtを使ってみる。

#include <fmt/core.h>

int main()
{
    fmt::print("Hello World!");
}

コンパイルを実行する前は

こんな感じでfmtが名前解決できてないが、コンパイルすると名前解決される。

コンパイル後にこのプログラムを実行して

Hello World!

こんな感じでコンソールに表示されれはOKだ!

まとめ(感想文)

他の言語環境でパッケージマネージャーに苦しめられることもあったけども、あると便利だと思う今日この頃。