チュートリアル: WSL 2 と Visual Studio 2022 を使用して C++ をビルドおよびデバッグする
Visual Studio 2022 では、Linux 用 Windows サブシステム バージョン 2 (WSL 2) の開発のため、ネイティブ C++ ツールセットが導入されています。 このツールセットが Visual Studio 2022 バージョン 17.0 以上で使用できるようになりました。
WSL 2 は、Linux 用 Windows サブシステム (WSL) で推奨される新しいバージョンです。 優れた Linux ファイル システムのパフォーマンス、GUI のサポート、および完全なシステム呼び出しの互換性が実現しています。 Visual Studio の WSL 2 ツールセットを使うと、SSH 接続を追加せずに、Visual Studio を使って WSL 2 ディストリビューション上で C++ コードをビルドおよびデバッグできます。 Visual Studio 2019 バージョン 16.1 で導入されたネイティブの WSL 1 ツールセットを使用して、WSL 1 ディストリビューションでも C++ コードをビルドおよびデバッグすることができます。
Visual Studio の WSL 2 ツールセットでは、CMake と MSBuild の両方をベースにした Linux プロジェクトをサポートしています。 Visual Studio を使用したすべての C++ クロスプラットフォーム開発で、CMake をお勧めします。 CMake をお勧めするのは、Windows、WSL、およびリモート システム上で同じプロジェクトがビルドおよびデバッグされるためです。
このトピックの情報のビデオ プレゼンテーションについては、「Video: Debug C++ with WSL 2 Distributions and Visual Studio 2022」(ビデオ: WSL 2 ディストリビューションと Visual Studio 2022 を使用した C++ のデバッグ) をご覧ください。
WSL 2 ツールセットの背景
Visual Studio での C++ クロスプラットフォーム サポートは、すべてのソース ファイルが Windows ファイル システムで発生していることを想定しています。 WSL 2 ディストリビューションをターゲットにする場合、Visual Studio はローカルの rsync
コマンドを実行して、Windows ファイル システムから WSL ファイル システムにファイルをコピーします。 ローカル コピー rsync
では、ユーザーの介入は必要ありません。 これは、Visual Studio で WSL 2 ディストリビューションが使用されていることが検出されると、自動的に発生します。 WSL 1 と WSL 2 の違いの詳細については、「WSL 1 と WSL 2 の比較」を参照してください。
Visual Studio の CMake プリセット統合は、WSL 2 ツールセットをサポートします。 詳細については、「CMake Presets integration in Visual Studio and Visual Studio Code」(Visual Studio と Visual Studio Code での CMake プリセット統合) および「Configure and build with CMake Presets in Visual Studio」(Visual Studio の CMake プリセットを使用した構成とビルド) を参照してください。 この記事の「高度な WSL 2 および CMake プロジェクトでの考慮事項」の下にもさらに詳しい情報があります。
ビルド ツールをインストールする
WSL 2 でビルドおよびデバッグするために必要なツールをインストールします。 後の手順で、Visual Studio の CMake バイナリ展開を使って、CMake の最新バージョンをインストールします。
「WSL のインストール」の手順に従って、WSL と WSL 2 ディストリビューションをインストールします。
ディストリビューションで
apt
が使用されている場合 (このチュートリアルでは Ubuntu を使用します)、次のコマンドを使用して、WSL 2 ディストリビューションに必要なビルド ツールをインストールします。sudo apt update sudo apt install g++ gdb make ninja-build rsync zip
上述の
apt
コマンドでは、次がインストールされます。- C++ コンパイラ
gdb
CMake
rsync
zip
- 基になるビルド システム ジェネレーター
WSL 2 ディストリビューションを使用したクロスプラットフォーム CMake 開発
このチュートリアルでは、Ubuntu で GCC と Ninja を使用します。 そして、Visual Studio 2022 バージョン 17.0 Preview 2 以降です。
Visual Studio では CMake プロジェクトが、プロジェクト ルートに CMakeLists.txt
ファイルを含むフォルダーとして定義されます。 このチュートリアルでは、Visual Studio の CMake プロジェクト テンプレートを使って、新しい CMake プロジェクトを作成します。
Visual Studio の [作業の開始] 画面から、[新しいプロジェクトの作成] を選択します。
使用できるオプションは次のとおりです: リポジトリをクローンする、プロジェクトまたはソリューションを開く、ローカル フォルダーを開く、新しいプロジェクトを作成する、またはコードなしで続行する。":::
[テンプレートの検索] テキストボックスに、「cmake」と入力します。 [CMake] プロジェクト タイプを選択して [次へ] を選択します。 プロジェクトに名前と場所を指定して、[作成] を選択します。
Visual Studio の CMake プリセット統合を有効にします。 [ツール]>[オプション]>[CMake]>[全般] を選択します。 [構成、ビルド、テストのために CMake プリセットを使用することを優先します] を選択して、[OK] を選択します。 代わりに、プロジェクトのルートに
CMakePresets.json
ファイルを追加することもできます。 詳細については、CMake プリセット統合の有効化に関する記事を参照してください。CMake 構成ファイル グループでは、[使用可能な場合は CMake プリセットを使用し、それ以外の場合は CMakeSettings.json を使用する] にコールアウトが示され、選ばれています。
統合をアクティブにするには、メイン メニューから [ファイル]>[フォルダーを閉じる] を選択します。 [作業の開始] ページが表示されます。 [最近開いた項目] で、今閉じたフォルダーを選択してフォルダーを再度開きます。
Visual Studio メイン メニュー バーの全体に 3 つのドロップダウンがあります。 左側のドロップダウンを使用して、アクティブなターゲット システムを選択します。 これは、プロジェクトを構成およびビルドするために CMake が呼び出されるシステムです。 Visual Studio は
wsl -l -v
を使用して WSL のインストールのクエリを実行します。 次の画像では、[WSL2: Ubuntu-20.04] がターゲット システムとして選択されています。Note
Visual Studio でプロジェクトの自動構成が開始したら、手順 11 を読んで CMake バイナリ展開を管理し、下記の手順に進みます。 この動作をカスタマイズするには、「自動構成とキャッシュ通知を変更する」を参照してください。
中央のドロップダウンを使用して、アクティブな構成プリセットを選択します。 構成プリセットでは、Visual Studio に CMake の呼び出しと、基になるビルド システムの生成方法が示されます。 手順 7 のアクティブな構成プリセットは、Visual Studio によって作成された linux-default プリセットです。 カスタム構成プリセットを作成するには、[構成の管理…] を選択します。構成プリセットの詳細については、「構成プリセットの選択」および「プリセットの編集」を参照してください。
右側のドロップダウンを使用して、アクティブなビルド プリセットを選択します。 ビルド プリセットは、Visual Studio にビルドの呼び出し方法を示します。 手順 7 の画像で、アクティブなビルド プリセットは、Visual Studio によって作成された既定のビルド プリセットです。 ビルド プリセットの詳細については、「ビルド プリセットの選択」を参照してください。
WSL 2 でプロジェクトを構成します。 プロジェクトの生成が自動的に開始しない場合は、[プロジェクト]>[project-name の構成] でマニュアルで構成を呼び出します
サポートされているバージョンの CMake が WSL 2 ディストリビューションにインストールされていない場合、Visual Studio のメイン メニュー リボンの下に、CMake の最新バージョンを展開するように求めるメッセージが表示されます。 [はい] を選択して、CMake バイナリを WSL 2 ディストリビューションに展開します。
サポートされている C Make バージョンがインストールされていないため、ユーザーは Cmake. org から最新の C Make バイナリをインストールするかどうかを求められます。
構成手順が完了し、[CMake] ペインの [出力] ウィンドウに "CMake generation finished" メッセージが表示されることを確認します。 ビルド ファイルは、WSL 2 ディストリビューションのファイル システム内のディレクトリに書き込まれます。
アクティブなデバッグ ターゲットを選択します。 デバッグのドロップダウン メニューには、プロジェクトで使用できるすべての CMake ターゲットが一覧表示されます。
ソリューション エクスプローラーで、プロジェクトのサブフォルダーを展開します。
CMakeProject.cpp
ファイルで、main()
にブレークポイントを設定します。 CMake ターゲット ビューに移動するには、次のスクリーンショットで強調表示されている ソリューション エクスプローラーの [ピッカーの表示] ボタンを選択します。[デバッグ]>[開始] を選択するか、F5 キーを押します。 プロジェクトがビルドされ、実行可能ファイルが WSL 2 ディストリビューションで起動し、Visual Studio がブレークポイントで実行を停止します。 プログラムの出力 (この場合は
"Hello CMake."
) が Linux コンソール ウィンドウに表示されます。Visual Studio Linux コンソール ウィンドウに、プログラムの出力 "Hello C Make" が表示されます。 エディター ウィンドウに hello world プログラムが表示されます。 return 0; という行のブレークポイントで実行が停止しました。"
これで、WSL 2 および Visual Studio 2022 を使用して C++ アプリがビルドおよびデバッグされました。
高度な WSL 2 および CMake プロジェクトでの考慮事項
Visual Studio は、アクティブな構成ファイルとして CMakePresets.json
を使用する CMake プロジェクトに対する WSL 2 のネイティブ サポートのみを提供します。 CMakeSettings.json
から CMakePresets.json
に移行する場合は、Visual Studio での CMake プリセット統合の有効化に関する記事を参照してください。
WSL 2 ディストリビューションをターゲットにしているが、WSL 2 ツールセットを使用したくない場合は、CMakePresets.json
の Visual Studio リモート設定ベンダー マップで、forceWSL1Toolset を true に設定します。 詳細については、「Visual Studio リモート設定ベンダー マップ」を参照してください。
forceWSL1Tooslet が true に設定されている場合、Visual Studio はソース ファイルのコピーを WSL ファイル システムに保持しません。 代わりに、マウントされた Windows ドライブ (/mnt/
…) 内のソース ファイルにアクセスします。
ほとんどの場合、プロジェクト ファイルが Windows ファイル システムに保存されると WSL 2 の速度が低下するため、WSL 2 ツールセットを WSL 2 ディストリビューションで使うのが最適です。 WSL 2 でのファイル システムのパフォーマンスの詳細については、「WSL 1 と WSL 2 の比較」を参照してください。
CMakePresets.json
の Visual Studio リモート設定ベンダー マップで、プロジェクトがコピーされる WSL 2 上のディレクトリ パス、ソース コピーのオプション、rsync コマンドの引数などの高度な設定を指定します。 詳細については、「Visual Studio リモート設定ベンダー マップ」を参照してください。
引き続き、システム ヘッダーは、ネイティブの IntelliSense エクスペリエンスを提供するために、Windows ファイル システムに自動的にコピーされます。 このコピーに含まれているか除外されているヘッダーは、CMakePresets.json
の Visual Studio リモート設定ベンダー マップでカスタマイズできます。
CMakePresets.json
の Visual Studio 設定ベンダー マップでは、IntelliSense モードを変更することも、他の IntelliSense オプションを指定することもできます。 ベンダー マップの詳細については、「Visual Studio リモート設定ベンダー マップ」を参照してください。
WSL 2 および MSBuild ベースの Linux プロジェクト
Visual Studio によるすべての C++ クロスプラットフォーム開発で CMake をお勧めします。これにより、Windows、WSL、およびリモート システムで同じプロジェクトをビルドおよびデバッグできるようになるためです。
ただし、MSBuild ベースの Linux プロジェクトがある可能性があります。
MSBuild ベースの Linux プロジェクトがある場合は、Visual Studio で WSL 2 ツールセットにアップグレードできます。 ソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ]>[全般]>[プラットフォーム ツールセット] を選びます。
WSL 2 ディストリビューションをターゲットとしており、WSL 2 ツールセットを使いたくない場合は、[プラットフォーム ツールセット] ドロップダウンで [Linux 用 Windows サブシステムの GCC] または [Linux 用 Windows サブシステムの Clang] ツールセットを選びます。 これらのツールセットのいずれかが選ばれている場合、Visual Studio は WSL ファイル システムにソース ファイルのコピーを保持せず、マウントされた Windows ドライブ (/mnt/
…) 経由でソース ファイルにアクセスします。 引き続き、システム ヘッダーは、ネイティブの IntelliSense エクスペリエンスを提供するために、Windows ファイル システムに自動的にコピーされます。 [プロパティ] ページ>[全般] で、このコピーに対して追加または除外するヘッダーをカスタマイズします。
プロジェクト ファイルが Windows ファイル システムに保存されている場合、WSL 2 の速度が低下するため、ほとんどの場合、WSL 2 ディストリビューションで WSL 2 ツールセットを使うことが最適です。 詳細については、WSL 1 と WSL 2 の比較に関する記事を参照してください。
関連項目
ビデオ: WSL 2 ディストリビューションと Visual Studio 2022 を使用して C++ をデバッグする
Visual Studio 2022 のダウンロード
Visual Studio で CMake Linux プロジェクトを作成する
チュートリアル: リモート Windows マシンで CMake プロジェクトをデバッグする