Microsoft C++ 用に VS Code を構成する
このチュートリアルでは、Windows で Microsoft Visual C++ コンパイラとデバッガーを使用するように Visual Studio Code を構成します。
VS Code を構成した後、VS Code で簡単な Hello World プログラムをコンパイルしてデバッグします。このチュートリアルでは、Microsoft C++ ツールセットや C++ 言語の詳細については説明しません。これらの主題については、Web 上に多くの優れたリソースがあります。
問題がある場合は、VS Code ドキュメント リポジトリでこのチュートリアルの issue をお気軽に提出してください。
前提条件
このチュートリアルを正常に完了するには、次のことを行う必要があります
-
Visual Studio Code をインストールします。
-
VS Code 用の C/C++ 拡張機能をインストールします。C/C++ 拡張機能は、拡張機能ビュー (⇧⌘X (Windows、Linux の場合 Ctrl+Shift+X)) で 'c++' を検索してインストールできます。
-
Microsoft Visual C++ (MSVC) コンパイラ ツールセットをインストールします。
最近のバージョンの Visual Studio をお持ちの場合は、Windows の [スタート] メニューから Visual Studio インストーラーを開き、C++ ワークロードがチェックされていることを確認します。インストールされていない場合は、ボックスをチェックし、インストーラーの [変更] ボタンを選択します。
完全な Visual Studio IDE をインストールしなくても、C++ によるデスクトップ開発ワークロードをインストールすることもできます。Visual Studio のダウンロードページで、[すべてのダウンロード] セクションの下にある [Tools for Visual Studio] が表示されるまで下にスクロールし、[Build Tools for Visual Studio 2022] のダウンロードを選択します。
これにより Visual Studio インストーラーが起動し、利用可能な Visual Studio Build Tools ワークロードを示すダイアログが表示されます。[C++ によるデスクトップ開発] ワークロードをチェックして、[インストール] を選択します。
注: 有効な Visual Studio ライセンス (Community、Pro、または Enterprise のいずれか) をお持ちであれば、Visual Studio Build Tools の C++ ツールセットを Visual Studio Code と 함께 사용하여 모든 C++ コードを開発、ビルド、テストできます。
Microsoft Visual C++ のインストールを確認する
コマンド ラインまたは VS Code から MSVC を使用するには、Developer Command Prompt for Visual Studio から実行する必要があります。PowerShell、Bash、または Windows コマンド プロンプトなどの通常のシェルには、必要なパス環境変数が設定されていません。
VS 用の開発者コマンド プロンプトを開くには、Windows の [スタート] メニューで「developer」と入力し始めると、候補のリストに表示されます。正確な名前は、インストールした Visual Studio または Visual Studio Build Tools のバージョンによって異なります。項目を選択してプロンプトを開きます。
「cl」と入力すると C++ コンパイラ cl.exe
が正しくインストールされていることをテストできます。バージョンと基本的な使用法の説明を含む著作権メッセージが表示されるはずです。
Developer Command Prompt が開始ディレクトリとして BuildTools の場所を使用している場合 (そこにプロジェクトを配置したくないでしょう)、新しいプロジェクトの作成を開始する前にユーザーフォルダー (C:\users\{your username}\
) に移動します。
注: 何らかの理由で Developer Command Prompt から VS Code を実行できない場合は、Developer Command Prompt の外部で VS Code を実行するで、VS Code で C++ プロジェクトをビルドするための回避策を見つけることができます。
Hello World を作成する
Developer Command Prompt から、すべての VS Code プロジェクトを保存できる "projects" という名前の空のフォルダーを作成し、次に "helloworld" という名前のサブフォルダーを作成してそこに移動し、そのフォルダー (.
) で VS Code (code
) を開きます。これには、次のコマンドを入力します。
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
"code ." コマンドは、現在の作業フォルダーで VS Code を開きます。これが "ワークスペース" になります。チュートリアルを進めていくと、ワークスペース内の .vscode
フォルダーに 3 つのファイルが作成されるのがわかります。
tasks.json
(ビルド手順)launch.json
(デバッガー設定)c_cpp_properties.json
(コンパイラのパスと IntelliSense の設定)
ソース コード ファイルを追加する
ファイル エクスプローラーのタイトル バーで、新しいファイル ボタンを選択し、ファイル名をhelloworld.cpp
にします。
Hello World のソースコードを追加する
このソースコードを貼り付けます。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
次に ⌘S (Windows、Linux の場合 Ctrl+S) を押してファイルを保存します。追加したファイルが VS Code のサイド バーの ファイル エクスプローラー ビュー (⇧⌘E (Windows、Linux の場合 Ctrl+Shift+E)) に表示されることに注意してください。
メインのファイルメニューで自動保存をチェックして、ファイルの変更を自動的に保存する自動保存を有効にすることもできます。
左端のアクティビティ バーでは、検索、ソース管理、実行などのさまざまなビューを開くことができます。このチュートリアルの後半で実行ビューについて見ていきます。他のビューの詳細については、VS Code のユーザーインターフェイスのドキュメントで確認できます。
注: C++ ファイルを保存または開くと、新機能や修正をテストできる Insiders バージョンの利用可能性に関する C/C++ 拡張機能からの通知が表示される場合があります。
X
(通知をクリア) を選択して、この通知を無視できます。
IntelliSense を探索する
新しい helloworld.cpp
ファイルで、vector
または string
にカーソルを合わせると、型情報が表示されます。msg
変数の宣言の後、メンバー関数を呼び出すときのように msg.
と入力し始めます。すぐに、すべてのメンバー関数を示す補完リストと、msg
オブジェクトの型情報を示すウィンドウが表示されるはずです。
Tab キーを押して選択したメンバーを挿入できます。その後、開き括弧を追加すると、関数が必要とする引数に関する情報が表示されます。
helloworld.cpp を実行する
C++ 拡張機能は、マシンにインストールされている C++ コンパイラを使用してプログラムをビルドすることに注意してください。VS Code でhelloworld.cpp
を実行およびデバッグする前に、C++ コンパイラがインストールされていることを確認してください。
-
helloworld.cpp
をアクティブ ファイルとして開きます。 -
エディターの右上隅にある再生ボタンを押します。
-
システムで検出されたコンパイラのリストから C/C++: cl.exe build and debug active file を選択します。
helloworld.cpp
を初めて実行するときにのみコンパイラを選択するように求められます。このコンパイラは、tasks.json
ファイルで「デフォルト」コンパイラとして設定されます。
-
ビルドが成功すると、プログラムの出力は統合ターミナルに表示されます。
cl.exe を使用してビルドおよびデバッグしようとするとエラーが発生する場合は、Developer Command Prompt for Visual Studio から VS Code を開始し、code .
ショートカットを使用していることを確認してください。
プログラムを初めて実行すると、C++ 拡張機能はtasks.json
を作成します。これはプロジェクトの.vscode
フォルダーにあります。tasks.json
にはビルド構成が格納されます。
新しいtasks.json
ファイルは以下の JSON のようになるはずです。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: cl.exe build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}"
],
"problemMatcher": ["$msCompile"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
]
}
注意:
tasks.json
の変数については、変数リファレンスで詳細を確認できます。
command
設定は実行するプログラムを指定します。この場合は "cl.exe" です。args
配列は、cl.exe に渡されるコマンドライン引数を指定します。これらの引数は、コンパイラが期待する順序で指定する必要があります。
このタスクは、C++ コンパイラにアクティブなファイル (${file}
) を受け取り、それをコンパイルし、現在のディレクトリ (${fileDirname}
) に、アクティブなファイルと同じ名前で拡張子が .exe
の実行可能ファイル (/Fe:
スイッチ) (${fileBasenameNoExtension}.exe
) を作成するように指示します。この例では helloworld.exe
となります。
label
の値はタスク リストに表示されるものです。好きなように名前を付けることができます。
detail
の値は、タスクリストでタスクの説明として表示されます。同様のタスクと区別するために、この値を変更することを強くお勧めします。
problemMatcher
の値は、コンパイラ出力のエラーと警告を見つけるために使用する出力パーサーを選択します。cl.exe の場合、$msCompile
problem matcher を使用すると最良の結果が得られます。
これ以降、再生ボタンは tasks.json
を読み取ってプログラムのビルドと実行方法を決定します。tasks.json
には複数のビルドタスクを定義でき、デフォルトとしてマークされたタスクが再生ボタンで使用されます。デフォルトのコンパイラを変更する必要がある場合は、Tasks: Configure default build task を実行できます。または、tasks.json
ファイルを変更し、このセグメントを置き換えてデフォルトを削除することもできます。
"group": {
"kind": "build",
"isDefault": true
},
これで
"group": "build",
tasks.json の変更
"${file}"
の代わりに "${workspaceFolder}/*.cpp"
のような引数を使用して、複数の C++ ファイルをビルドするように tasks.json
を変更できます。これにより、現在のフォルダー内のすべての .cpp
ファイルがビルドされます。また、"${fileDirname}\\${fileBasenameNoExtension}.exe"
をハードコードされたファイル名 (例: "${workspaceFolder}\\myProgram.exe"
) に置き換えることで、出力ファイル名を変更することもできます。
helloworld.cpp をデバッグする
コードをデバッグするには、
helloworld.cpp
に戻り、アクティブ ファイルにします。- エディターのマージンをクリックするか、現在の行で F9 を使用してブレークポイントを設定します。
- 再生ボタンの横にあるドロップダウンから、C/C++ ファイルをデバッグを選択します。
- システムで検出されたコンパイラのリストから C/C++: cl.exe build and debug active file を選択します (
helloworld.cpp
を初めて実行またはデバッグするときにのみコンパイラの選択を求められます)。
再生ボタンには Run C/C++ File と Debug C/C++ File の 2 つのモードがあります。デフォルトでは最後に使用されたモードになります。再生ボタンにデバッグ アイコンが表示されている場合は、ドロップダウン メニュー項目を選択する代わりに、再生ボタンを選択してデバッグできます。
cl.exe を使用してビルドおよびデバッグしようとするとエラーが発生する場合は、Developer Command Prompt for Visual Studio から VS Code を開始し、code .
ショートカットを使用していることを確認してください。
デバッガーを探索する
コードのステップ実行を開始する前に、ユーザーインターフェイスのいくつかの変更点に注目してみましょう。
-
統合ターミナルはソースコード エディターの下部に表示されます。デバッグ出力タブには、デバッガーが起動して実行中であることを示す出力が表示されます。
-
エディターは、デバッガーを開始する前にブレークポイントを設定した行を強調表示します。
-
左側の実行とデバッグビューにはデバッグ情報が表示されます。このチュートリアルで後ほど例を示します。
-
コード エディターの上部にデバッグ コントロール パネルが表示されます。左側のドットを掴んで画面上を移動させることができます。
コードをステップ実行する
これで、コードのステップ実行を開始する準備ができました。
-
デバッグ コントロール パネルのステップ オーバー アイコンをクリックするか、押します。
これにより、プログラムの実行が for ループの最初の行に進み、
msg
変数が作成および初期化されるときに呼び出されるvector
およびstring
クラス内のすべての内部関数呼び出しがスキップされます。左側の [変数] ウィンドウの変化に注目してください。この場合、ループの変数名はデバッガーから見えるようになっていますが、ステートメントはまだ実行されていないため、この時点では何も読み取ることができません。しかし、
msg
の内容は、そのステートメントが完了しているため表示されます。 -
ステップ オーバーをもう一度押して、このプログラムの次のステートメントに進みます (ループを初期化するために実行されるすべての内部コードをスキップします)。これで、変数ウィンドウにはループ変数に関する情報が表示されます。
-
もう一度 [ステップ オーバー] を押して、
cout
ステートメントを実行します。(C++ 拡張機能は、ループが終了するまで デバッグ コンソール には何も出力しないことに注意してください。) -
よろしければ、ベクター内のすべての単語がコンソールに出力されるまで [ステップ オーバー] を押し続けることができます。しかし、興味があれば、[ステップ イン] ボタンを押して C++ 標準ライブラリのソース コードをステップスルーしてみてください!
独自のコードに戻るには、[ステップ オーバー] を押し続ける方法があります。もう 1 つの方法は、コード エディターで
helloworld.cpp
タブに切り替え、ループ内のcout
ステートメントのどこかに挿入ポイントを置き、F9 を押してコードにブレークポイントを設定することです。左側のガターに赤い点が表示され、この行にブレークポイントが設定されたことを示します。次に F5 を押して、標準ライブラリ ヘッダーの現在の行から実行を開始します。実行は
cout
で中断されます。必要であれば、もう一度 F9 を押してブレークポイントをオフに切り替えることができます。
ウォッチを設定する
プログラムの実行中に変数の値を追跡したい場合があります。これは、変数に ウォッチ を設定することで実行できます。
-
ループ内に挿入ポイントを置きます。[ウォッチ] ウィンドウで、プラス記号を選択し、テキスト ボックスにループ変数名である
word
と入力します。次に、ループをステップスルーしながらウォッチ ウィンドウを表示します。 -
ループの前に
int i = 0;
というステートメントを追加して、別のウォッチを追加します。次に、ループ内に++i;
というステートメントを追加します。前のステップで行ったように、i
のウォッチを追加します。 -
ブレークポイントで実行が一時停止している間に任意の変数の値をすばやく表示するには、マウス ポインターをその変数に重ねます。
launch.json を使用してデバッグをカスタマイズする
再生ボタンまたは F5 でデバッグすると、C++ 拡張機能は動的なデバッグ構成をその場で作成します。
実行時にプログラムに渡す引数を指定するなど、デバッグ構成をカスタマイズしたい場合があります。カスタム デバッグ構成はlaunch.json
ファイルで定義できます。
launch.json
を作成するには、再生ボタンのドロップダウン メニューからデバッグ構成の追加を選択します。
すると、さまざまな事前定義されたデバッグ構成のドロップダウンが表示されます。C/C++: cl.exe build and debug active file を選択します。
VS Code はlaunch.json
ファイルを作成します。これは次のようになります。
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: cl.exe build and debug active file",
"type": "cppvsdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "C/C++: cl.exe build active file"
}
]
}
上記の JSON では、program
はデバッグしたいプログラムを指定します。ここでは、アクティブなファイル フォルダー (${fileDirname}
) と、拡張子が .exe
のアクティブなファイル名 (${fileBasenameNoExtension}.exe
) に設定されています。helloworld.cpp
がアクティブなファイルの場合、これは helloworld.exe
になります。args
プロパティは、実行時にプログラムに渡す引数の配列です。
デフォルトでは、C++ 拡張機能はソースコードにブレークポイントを追加せず、stopAtEntry
の値はfalse
に設定されています。
デバッグを開始したときにデバッガーがmain
メソッドで停止するように、stopAtEntry
の値をtrue
に変更します。
これ以降、再生ボタンと F5 は、デバッグのためにプログラムを起動するときに
launch.json
ファイルから読み取ります。
C/C++ の構成
C/C++ 拡張機能をより細かく制御したい場合は、c_cpp_properties.json
ファイルを作成できます。これにより、コンパイラへのパス、インクルード パス、C++ 標準 (デフォルトは C++17) などの設定を変更できます。
C/C++ 構成 UI は、コマンド パレット (⇧⌘P (Windows、Linux の場合 Ctrl+Shift+P)) から C/C++: Edit Configurations (UI) コマンドを実行して表示できます。
これにより、C/C++ 構成ページが開きます。ここで変更を加えると、VS Code はそれらを.vscode
フォルダー内のc_cpp_properties.json
というファイルに書き込みます。
Visual Studio Code はこれらの設定を .vscode\c_cpp_properties.json
に配置します。そのファイルを直接開くと、次のようになります。
{
"configurations": [
{
"name": "Win32",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"windowsSdkVersion": "10.0.18362.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
インクルード パス 配列設定に追加する必要があるのは、プログラムにワークスペース内または標準ライブラリ パスにないヘッダー ファイルが含まれている場合のみです。
コンパイラのパス
compilerPath
設定は、構成における重要な設定です。拡張機能はこれを使用して、C++ 標準ライブラリ ヘッダー ファイルへのパスを推測します。拡張機能がこれらのファイルの場所を知っていると、スマート補完や [定義へ移動] ナビゲーションなどの便利な機能を提供できます。
C/C++ 拡張機能は、システム上で見つかったものに基づいて、デフォルトのコンパイラの場所で compilerPath
を設定しようとします。拡張機能は、いくつかの一般的なコンパイラの場所を検索します。
compilerPath
の検索順序は次のとおりです。
- まず Microsoft Visual C++ コンパイラを確認します
- 次に Windows Subsystem for Linux (WSL) 上の g++ を探します
- 次に Mingw-w64 用の g++ を探します。
g++ または WSL がインストールされている場合は、プロジェクトの優先コンパイラに合わせて compilerPath
を変更する必要があるかもしれません。Microsoft C++ の場合、パスはインストールされている特定のバージョンに応じて、次のようになります: "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe"。
C++ 構成の再利用
VS Code は Microsoft C++ コンパイラを使用するように構成されました。この構成は現在のワークスペースに適用されます。構成を再利用するには、JSON ファイルを新しいプロジェクト フォルダー (ワークスペース) の .vscode
フォルダーにコピーし、必要に応じてソース ファイル名や実行可能ファイル名を変更します。
Developer Command Prompt の外部で VS Code を実行する
特定の状況下では、Developer Command Prompt for Visual Studio から VS Code を実行することができません (たとえば、SSH を介したリモート開発シナリオなど)。その場合、次の tasks.json
構成を使用して、ビルド中に Developer Command Prompt for Visual Studio の初期化を自動化できます。
{
"version": "2.0.0",
"windows": {
"options": {
"shell": {
"executable": "cmd.exe",
"args": [
"/C",
// The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
"\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
"&&"
]
}
}
},
"tasks": [
{
"type": "shell",
"label": "cl.exe build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}"
],
"problemMatcher": ["$msCompile"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
注:
VsDevCmd.bat
へのパスは、Visual Studio のバージョンやインストール パスによって異なる場合があります。コマンド プロンプトを開き、dir "\VsDevCmd*" /s
を実行することでVsDevCmd.bat
へのパスを見つけることができます。
トラブルシューティング
「cl.exe」という用語は認識されません
「'cl.exe' という用語は、cmdlet、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません」というエラーが表示された場合、これは通常、Developer Command Prompt for Visual Studio の外部で VS Code を実行しており、VS Code が cl.exe
コンパイラへのパスを知らないことを意味します。
VS Code は、Developer Command Prompt for Visual Studio から起動するか、Developer Command Prompt の外部で実行するようにタスクを構成する必要があります。
新しいターミナル (⌃⇧` (Windows、Linux の場合 Ctrl+Shift+`)) を開き、「cl」と入力して cl.exe
が VS Code で利用可能であることを確認することで、常に Developer Command Prompt のコンテキストで VS Code を実行していることを確認できます。
fatal error C1034: assert.h: no include path set
この場合、cl.exe
は PATH
環境変数を介して VS Code で利用可能ですが、VS Code は依然として Developer Command Prompt for Visual Studio から起動するか、Developer Command Prompt の外部で実行するように構成する必要があります。そうしないと、cl.exe
は INCLUDE
などの重要な環境変数にアクセスできません。
次のステップ
- VS Code ユーザー ガイドを参照してください。
- C++ 拡張機能の概要を確認してください。
- 新しいワークスペースを作成し、
.vscode
JSON ファイルをそこにコピーし、新しいワークスペースのパスやプログラム名などに合わせて必要な設定を調整すれば、コーディングを開始できます!