チュートリアル: Visual Studio で CMake でパッケージをインストールして使用する
このチュートリアルでは、CMake、vcpkg、Visual Studio で fmt
ライブラリを使用する C++ "Hello World" プログラムを作成する方法について説明します。 依存関係のインストール、構成、ビルド、および単純なアプリケーションの実行を行います。
前提条件
1 - vcpkg を設定する
リポジトリの複製
最初の手順では、GitHub から vcpkg リポジトリを複製します。 リポジトリには、vcpkg 実行可能ファイルを取得するスクリプトと、vcpkg コミュニティによって管理されるキュレーションされたオープンソース ライブラリのレジストリが含まれています。 これを行うには、次を実行します。
git clone https://github.com/microsoft/vcpkg.git
vcpkg キュレーション レジストリは、2,000 を超えるオープンソース ライブラリのセットです。 これらのライブラリは、vcpkg の継続的インテグレーション パイプラインによって検証され、連携しています。 vcpkg リポジトリにはこれらのライブラリのソース コードは含まれていませんが、レシピとメタデータを保持して、それらをビルドしてシステムにインストールします。
ブートストラップ スクリプトを実行する
vcpkg リポジトリを複製したら、
vcpkg
ディレクトリに移動し、ブートストラップ スクリプトを実行します。cd vcpkg && bootstrap-vcpkg.bat
cd vcpkg; .\bootstrap-vcpkg.bat
cd vcpkg && ./bootstrap-vcpkg.sh
ブートストラップ スクリプトは前提条件チェックを実行し、vcpkg 実行可能ファイルをダウンロードします。
これで完了です。 vcpkg がセットアップされ、使用する準備が整いました。
2 - Visual Studio プロジェクトを設定する
Visual Studio プロジェクトの作成
- "CMake プロジェクト" テンプレートを使用して Visual Studio で新しいプロジェクトを作成する
Visual Studio で新しい CMake プロジェクトを作成する方法を示す Visual Studio UI のスクリーンショット
- プロジェクトに "helloworld" という名前を付けます
- [ソリューションとプロジェクトを同じディレクトリに配置する] チェック ボックスをオンにします。
- [作成] ボタンをクリックします
CMake プロジェクトに名前を付け、[作成] ボタンをクリックするための Visual Studio UI のスクリーンショット。
VCPKG_ROOT
環境変数を構成します。Note
この方法で環境変数を設定すると、現在のターミナル セッションにのみ影響します。 これらの変更をすべてのセッションで永続的にするには、[Windows システム環境変数] パネルで設定します。
Visual Studio で組み込みの開発者 PowerShell ウィンドウを開きます。
組み込みの PowerShell 開発者ウィンドウの Visual Studio UI のスクリーンショット
次のコマンドを実行します。
$env:VCPKG_ROOT="C:\path\to\vcpkg" $env:PATH="$env:VCPKG_ROOT;$env:PATH"
VCPKG_ROOTを設定して PATH に追加する方法を示す、組み込みの PowerShell 開発者ウィンドウの Visual Studio UI のスクリーンショット。
Visual Studio で開発者コマンド プロンプトを開きます。
開発者コマンド プロンプト用の Visual Studio UI のスクリーンショット。
次のコマンドを実行します。
set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
VCPKG_ROOTを設定して PATH に追加する方法を示す Visual Studio 開発者コマンド プロンプトのスクリーンショット。
VCPKG_ROOT
設定すると、Visual Studio が vcpkg インスタンスを見つけるのに役立ちます。 これをPATH
に追加すると、シェルから直接 vcpkg コマンドを実行できます。マニフェスト ファイルを生成し、依存関係を追加します。
次のコマンドを実行して、vcpkg マニフェスト ファイル (
vcpkg.json
) を作成します。vcpkg new --application
vcpkg new
コマンドは、プロジェクトのディレクトリにvcpkg.json
ファイルとvcpkg-configuration.json
ファイルを追加します。依存関係として
fmt
パッケージを追加します。vcpkg add port fmt
これで、
vcpkg.json
に次のものが含まれるはずです。{ "dependencies": [ "fmt" ] }
これはマニフェスト ファイルです。 vcpkg はマニフェスト ファイルを読み取り、インストールする依存関係を学習し、CMake と統合して、プロジェクトに必要な依存関係を提供します。
生成された
vcpkg-configuration.json
ファイルには、プロジェクトの依存関係にminimum バージョンの制約配置する基準線が導入されています。 このファイルの変更は、このチュートリアルの範囲外です。 このチュートリアルでは適用できませんが、vcpkg-configuration.json
ファイルをソース管理の下に置いて、異なる開発環境間でバージョンの一貫性を確保することをお勧めします。
3 - プロジェクト ファイルを設定する
helloworld.cpp
ファイルを変更します。helloworld.cpp
の内容を次のコードに置き換えます。#include <fmt/core.h> int main() { fmt::print("Hello World!\n"); return 0; }
このソース ファイルには、
fmt
ライブラリの一部である<fmt/core.h>
ヘッダーが含まれています。main()
関数はfmt::print()
を呼び出して、"Hello World!" メッセージをコンソールに出力します。CMakePresets.json
ファイルを構成します。CMAKE_TOOLCHAIN_FILE
がvcpkg のカスタム ツールチェーンを使用するように設定されている場合、CMake は vcpkg によってインストールされたライブラリ自動的にリンクできます。 これは、CMake プリセット ファイルを使用して完成させることができます。次の内容に一致するように
CMakePresets.json
を変更します。{ "version": 2, "configurePresets": [ { "name": "vcpkg", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" } } ] }
次の内容で
CMakeUserPresets.json
を作成します。{ "version": 2, "configurePresets": [ { "name": "default", "inherits": "vcpkg", "environment": { "VCPKG_ROOT": "<path to vcpkg>" } } ] }
CMakePresets.json
ファイルには、CMAKE_TOOLCHAIN_FILE
変数を設定する "vcpkg" という名前のプリセットが 1 つ含まれています。CMakeUserPresets.json
ファイルは、vcpkg のローカル インストールを含む絶対パスを指すVCPKG_ROOT
環境変数を設定します。 バージョン管理システムにCMakeUserPresets.json
をチェックしないことをお勧めします。CMakeLists.txt
ファイルを編集します。CMakeLists.txt
ファイルの内容を次のコードに置き換えます。cmake_minimum_required(VERSION 3.10) project(HelloWorld) find_package(fmt CONFIG REQUIRED) add_executable(HelloWorld helloworld.cpp) target_link_libraries(HelloWorld PRIVATE fmt::fmt)
次に、
CMakeLists.txt
ファイルの各行の動作を分解してみましょう。cmake_minimum_required(VERSION 3.10)
: プロジェクトのビルドに必要な CMake の最小バージョンが 3.10 であることを指定します。 システムにインストールされている CMake のバージョンがこれより低い場合、ビルドは失敗します。project(HelloWorld)
: プロジェクトの名前を "HelloWorld" に設定します。find_package(fmt CONFIG REQUIRED)
: CMake 構成ファイルを使用してfmt
ライブラリを探します。REQUIRED
キーワードを使用すると、パッケージが見つからない場合にエラーが生成されます。add_executable(HelloWorld helloworld.cpp)
: ソース ファイルhelloworld.cpp
からビルドされた "HelloWorld" という名前の実行可能ターゲットを追加します。target_link_libraries(HelloWorld PRIVATE fmt::fmt)
:HelloWorld
実行可能ファイルがfmt
ライブラリに対してリンクする必要があることを指定します。PRIVATE
キーワードは、fmt
はHelloWorld
の構築にのみ必要であり、他の依存プロジェクトには反映されないことを示します。
4 - プロジェクトをビルドして実行する
プロジェクトをビルドします。
Ctrl+Shift+B
キーを押して、Visual Studio でプロジェクトをビルドします。アプリケーションを実行します。
最後に、実行可能ファイルを実行します。
実行可能ファイルを実行するための Visual Studio UI のスクリーンショット。
次のように出力されるはずです。
プログラムの出力のスクリーンショット - "Hello World!"
次のステップ
vcpkg.json
の詳細については、リファレンス ドキュメントを参照してください。
vcpkg