VS CodeをMicrosoft C++向けに設定する

このチュートリアルでは、Windows上でMicrosoft Visual C++コンパイラとデバッガーを使用するようにVisual Studio Codeを設定します。

VS Codeの設定後、VS Code内で簡単なHello Worldプログラムをコンパイルおよびデバッグします。このチュートリアルでは、Microsoft C++ツールセットやC++言語の詳細については解説しません。これらの主題については、Web上に多くの優れたリソースが存在します。

問題が発生した場合は、遠慮なくVS CodeドキュメントリポジトリでこのチュートリアルのIssueを報告してください。

前提条件

このチュートリアルを正常に完了するには、以下を行う必要があります。

  1. Visual Studio Code をインストールします。

  2. VS Code用C/C++拡張機能をインストールしてください。C/C++拡張機能は、拡張機能ビュー(⇧⌘X (Windows, Linux Ctrl+Shift+X))で「c++」を検索することでインストールできます。

    C/C++ extension

  3. Microsoft Visual C++ (MSVC) コンパイラツールセットをインストールしてください。

    Visual Studioの最新バージョンがインストールされている場合は、WindowsのスタートメニューからVisual Studio Installerを開き、C++ワークロードにチェックが入っていることを確認してください。また、MSVCビルドツールとWindows SDKが選択されていることも確認してください。これらのコンポーネントがインストールされていない場合は、該当するボックスにチェックを入れ、インストーラーの変更ボタンを選択してください。

    Visual Studio IDEをフルインストールせずに、C++によるデスクトップ開発ワークロードのみをインストールすることも可能です。Visual Studioのダウンロードページから、すべてのダウンロードセクションにあるTools for Visual Studioまでスクロールし、Build Tools for Visual Studio 2022をダウンロードしてください。

    Build Tools for Visual Studio download

    これによりVisual Studio Installerが起動し、利用可能なVisual Studio Build Toolsワークロードが表示されます。C++によるデスクトップ開発ワークロードにチェックを入れ、MSVCビルドツールとWindows SDKが選択されていることを確認して、インストールを選択してください。

    Cpp build tools workload

注意: Visual Studio Build ToolsのC++ツールセットをVisual Studio Codeと併用してC++コードの開発、ビルド、テストを行うことができますが、そのためには有効なVisual Studioライセンス(Community、Pro、またはEnterprise)が必要です。

Microsoft Visual C++のインストールを確認する

コマンドラインやVS CodeからMSVCを使用するには、Developer Command Prompt for Visual Studioから実行する必要があります。PowerShell、Bash、Windowsコマンドプロンプトなどの通常のシェルでは、必要なパス環境変数が設定されていません。

Developer Command Prompt for VSを開くには、Windowsのスタートメニューで「developer」と入力し始めると、候補リストに表示されます。正確な名前は、インストールしているVisual StudioまたはVisual Studio Build Toolsのバージョンによって異なります。その項目を選択してプロンプトを開いてください。

Developer Command Prompt

「cl」と入力して、C++コンパイラ cl.exe が正しくインストールされているか確認できます。バージョンと基本的な使用方法が記載された著作権メッセージが表示されるはずです。

Checking cl.exe installation

Developer Command Promptの起動ディレクトリがBuildToolsの場所になっている場合(そこにプロジェクトを置くべきではありません)、新しいプロジェクトを作成する前に、ユーザーフォルダー(C:\users\{ユーザー名}\)に移動してください。

注意: 何らかの理由で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とします。

New File title bar button

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))に表示されることに注意してください。

File Explorer

メインの **ファイル** メニューで **自動保存** をオンにすることで、ファイル変更を自動保存する 自動保存を有効にすることもできます。

左端のアクティビティバーからは、検索ソース管理実行などの異なるビューを開くことができます。このチュートリアルの後半で実行ビューを確認します。その他のビューの詳細については、VS Codeのユーザーインターフェースドキュメントを参照してください。

注意: C++ ファイルを保存または開くと、C/C++ 拡張機能から Insiders バージョンの利用可能性に関する通知が表示される場合があります。これにより、新機能や修正をテストできます。X (通知をクリア) を選択して、この通知を無視できます。

IntelliSense を探索する

新しい helloworld.cpp ファイルで、vector または string にマウスカーソルを合わせると型情報が表示されます。msg 変数の宣言後、メンバー関数を呼び出すときのように msg. と入力し始めてください。すべてのメンバー関数を表示する補完リストと、msg オブジェクトの型情報を表示するウィンドウがすぐに表示されるはずです。

Statement completion IntelliSense

Tabキーを押すと選択したメンバーが挿入されます。その後、開き括弧を入力すると、その関数が必要とする引数に関する情報が表示されます。

helloworld.cpp を実行する

C++ 拡張機能は、コンピューターにインストールされている C++ コンパイラを使用してプログラムをビルドすることを忘れないでください。VS Code で helloworld.cpp を実行およびデバッグする前に、C++ コンパイラがインストールされていることを確認してください。

  1. helloworld.cpp を開いて、アクティブなファイルにします。

  2. エディタの右上隅にある再生ボタンを押します。

    Screenshot of helloworld.cpp and play button

  3. システムで検出されたコンパイラのリストからC/C++: cl.exe build and debug active fileを選択します。

    C++ debug configuration dropdown

helloworld.cpp を初めて実行する際にのみ、コンパイラを選択するように求められます。このコンパイラは、tasks.json ファイルの「デフォルト」コンパイラとして設定されます。

  1. ビルドが成功すると、プログラムの出力が統合 **ターミナル** に表示されます。

    screenshot of program output

cl.exeでビルドやデバッグを試みてエラーが発生した場合は、必ずDeveloper Command Prompt for Visual Studioから code . ショートカットを使用してVS Codeを起動したことを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

プログラムを初めて実行すると、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: スイッチ)を作成するよう指示します(例:helloworld.exe)。

label 値は、タスク リストに表示されるものです。この名前は自由に付けることができます。

detail値は、タスクリストでタスクの説明として表示される内容です。類似のタスクと区別するために、この値を変更することを強くお勧めします。

problemMatcher値は、コンパイラの出力からエラーや警告を見つけるために使用する出力パーサーを選択します。cl.exeの場合、$msCompile問題マッチャーを使用するのが最適です。

今後は、再生ボタンは tasks.json を読み取って、プログラムをビルドおよび実行する方法を判断します。tasks.json で複数のビルド タスクを定義でき、デフォルトとしてマークされているタスクが再生ボタンによって使用されます。デフォルトのコンパイラを変更する必要がある場合は、**タスク: デフォルトのビルド タスクを構成する** を実行できます。または、tasks.json ファイルを変更して、このセグメントを削除します。

    "group": {
        "kind": "build",
        "isDefault": true
    },

これを置き換えます。

    "group": "build",

tasks.json の変更

tasks.jsonを編集し、"${file}"の代わりに"${workspaceFolder}/*.cpp"のような引数を使用することで、複数のC++ファイルをビルドするように設定できます。これにより、現在のフォルダー内のすべての .cpp ファイルがビルドされます。また、"${fileDirname}\\${fileBasenameNoExtension}.exe"をハードコードされたファイル名(例:"${workspaceFolder}\\myProgram.exe")に置き換えることで、出力ファイル名を変更することも可能です。

helloworld.cpp をデバッグする

コードをデバッグするには、

  1. helloworld.cpp に戻って、アクティブなファイルにします。
  2. エディタのマージンをクリックするか、現在の行で F9 を使用してブレークポイントを設定します。 helloworld.cpp のブレークポイントのスクリーンショット
  3. 再生ボタンの横にあるドロップダウンから、**C/C++ ファイルのデバッグ** を選択します。 再生ボタンのドロップダウンのスクリーンショット
  4. システムで検出されたコンパイラのリストからC/C++: cl.exe build and debug active fileを選択します(コンパイラの選択は、helloworld.cppを初めて実行またはデバッグするときのみ求められます)。 C++デバッグ構成のドロップダウン

再生ボタンにはC/C++ファイルの実行C/C++ファイルのデバッグの2つのモードがあります。最後に使用したモードがデフォルトになります。再生ボタンにデバッグアイコンが表示されている場合は、ドロップダウンメニューから選択する代わりに再生ボタンを選択してデバッグできます。

cl.exeでビルドやデバッグを試みてエラーが発生した場合は、必ずDeveloper Command Prompt for Visual Studioから code . ショートカットを使用してVS Codeを起動したことを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

デバッガーを探索する

コードのステップ実行を開始する前に、ユーザーインターフェイスのいくつかの変更点に注目しましょう。

  • 統合ターミナルがソースコードエディタの下部に表示されます。**デバッグ出力** タブには、デバッガーが実行中であることを示す出力が表示されます。

  • エディターは、デバッガを開始する前にブレークポイントを設定した行をハイライト表示します。

    Initial breakpoint

  • 左側の **実行とデバッグ** ビューには、デバッグ情報が表示されます。チュートリアルの後半で例を示します。

  • コードエディタの上部に、デバッグ コントロール パネルが表示されます。左側のドットをつかんで画面上を移動させることができます。

    Debugging controls

コードをステップ実行する

これで、コードのステップ実行を開始する準備ができました。

  1. デバッグ コントロール パネルの **ステップ オーバー** アイコンをクリックまたは押します。

    Step over button

    これによりプログラムの実行がforループの最初の行に進み、msg変数が作成・初期化される際に呼び出されるvectorおよびstringクラス内の内部関数呼び出しはスキップされます。左側の変数ウィンドウの変化に注目してください。

    Debugging windows

    この場合、エラーが発生するのは予期された動作です。ループの変数名はデバッガーから見えるようになりましたが、文がまだ実行されていないため、現時点では読み取るものがないからです。ただし、その文が完了しているため、msgの内容は表示されます。

  2. **ステップ オーバー** をもう一度押すと、プログラムの次のステートメントに進みます (ループの初期化のために実行されるすべての内部コードをスキップします)。これで、**変数** ウィンドウにループ変数に関する情報が表示されます。

  3. もう一度ステップオーバーを押して cout 文を実行します。(C++拡張機能はループが終了するまでデバッグコンソールに何も出力しないことに注意してください。)

  4. 必要に応じて、ベクターのすべての単語がコンソールに出力されるまで **ステップ オーバー** を押し続けることができます。しかし、興味がある場合は、**ステップ イン** ボタンを押して、C++ 標準ライブラリのソース コードをステップ実行してみてください。

    Breakpoint in gcc standard library header

    自分のコードに戻るには、**ステップ オーバー** を押し続ける方法があります。別の方法として、コードにブレークポイントを設定するには、コードエディタの helloworld.cpp タブに切り替え、挿入ポイントをループ内の cout ステートメントのいずれかに置き、F9 を押します。左側のガターに赤いドットが表示され、この行にブレークポイントが設定されていることを示します。

    Breakpoint in main

    次に、F5 を押して、標準ライブラリ ヘッダーの現在の行から実行を開始します。実行は cout で停止します。必要に応じて、F9 をもう一度押してブレークポイントを切り替えることができます。

ウォッチを設定する

プログラムの実行中に変数の値を追跡したい場合があります。これは変数にウォッチを設定することで可能です。

  1. ループ内に挿入ポイントを置きます。ウォッチウィンドウでプラス記号を選択し、テキストボックスにループ変数の名前である word を入力します。ループをステップ実行しながらウォッチウィンドウを確認してください。

    Watch window

  2. ループの前に次のステートメントを追加して、別のウォッチを追加します: int i = 0;。次に、ループ内で次のステートメントを追加します: ++i;。次に、前のステップで同様に i のウォッチを追加します。

  3. ブレークポイントで実行が一時停止している間に変数の値をすばやく表示するには、マウス ポインターで変数をホバーさせることができます。

    Mouse hover

launch.json でデバッグをカスタマイズする

再生ボタンまたは F5 でデバッグすると、C++ 拡張機能は動的なデバッグ構成をオンザフライで作成します。

デバッグ構成をカスタマイズしたい場合があります。たとえば、実行時にプログラムに渡す引数を指定するなどです。カスタム デバッグ構成は、launch.json ファイルで定義できます。

launch.json を作成するには、再生ボタンのドロップダウン メニューから **デバッグ構成の追加** を選択します。

Add debug configuration play button menu

その後、定義済みのさまざまなデバッグ構成のドロップダウンが表示されます。C/C++: cl.exe build and debug active fileを選択します。

C++ debug configuration dropdown

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) などの設定を変更できます。

コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から **C/C++: 設定の編集 (UI)** コマンドを実行すると、C/C++ 設定 UI を表示できます。

Command Palette

これにより、**C/C++ 設定** ページが開きます。ここで変更を行うと、VS Code はそれを .vscode フォルダーの c_cpp_properties.json というファイルに書き込みます。

Command Palette

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
}

プログラムがワークスペース内や標準ライブラリパス内にないヘッダーファイルをインクルードしている場合のみ、Include path配列設定に追加する必要があります。

コンパイラパス

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' は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。"というエラーが表示される場合、通常は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が実行されているかを確認できます。

致命的なエラー C1034: assert.h: インクルードパスが設定されていません

この場合、cl.exePATH 環境変数を通じてVS Codeから利用可能ですが、VS Codeは依然としてDeveloper Command Prompt for Visual Studioから起動されるか、Developer Command Promptの外で実行するように構成されている必要があります。そうでない場合、cl.exeINCLUDE などの重要な環境変数にアクセスできません。

次のステップ

  • VS Code ユーザーガイドを探索します。
  • C++ 拡張機能の概要を確認します。
  • 新しいワークスペースを作成し、.vscode JSONファイルをそこにコピーし、新しいワークスペースのパスやプログラム名に合わせて必要な設定を調整して、コーディングを開始してください!
© . This site is unofficial and not affiliated with Microsoft.