VSCodeでC++をコンパイルするには、VSCode本体だけでなく、C++コンパイラを別途用意する必要があります。
VSCodeはソースコードを編集するためのエディターであり、C++のソースコードを直接コンパイルする機能そのものは備えていません。
一般的には、次の3つを準備します。
- Visual Studio Code
- Microsoftの「C/C++」拡張機能
- GCC・Clang・MSVCなどのC++コンパイラ
特に重要なのは、「C/C++拡張機能」と「C++コンパイラ」は別物だという点です。
C/C++拡張機能はコード補完やエラー表示、デバッグ支援などを提供しますが、実際のコンパイル処理はGCCやClang、MSVCなどが行います。
VSCodeにC/C++拡張機能をインストールする
拡張機能画面を開く
まず、VSCodeでMicrosoftの「C/C++」拡張機能をインストールします。
VSCode左側にある拡張機能アイコンをクリックするか、WindowsやLinuxでは次のショートカットを使用します。
Ctrl + Shift + X
検索欄に「C++」と入力し、Microsoftが提供している「C/C++」を選択してインストールします。
C/C++拡張機能で利用できる主な機能
C/C++拡張機能を導入すると、主に次のような機能を利用できます。
- C++のシンタックスハイライト
- IntelliSenseによるコード補完
- エラーや警告の表示
- 定義や参照先へのジャンプ
- デバッグ支援
- ビルドタスクとの連携
ただし、この拡張機能だけではC++をコンパイルできません。
別途、C++コンパイラが必要です。
C++コンパイラを準備する
利用するコンパイラはOSによって異なります。
代表的な組み合わせは次のとおりです。
| OS | 主なC++コンパイラ |
|---|---|
| Windows | GCC、MSVC、Clang |
| macOS | Clang |
| Linux | GCC、Clang |
WindowsでC++コンパイラを導入する
GCCを使用する場合
WindowsでGCCを利用する場合は、MSYS2などを利用してMinGW-w64系のGCCツールチェーンを導入する方法があります。
インストール後、VSCodeのターミナルで次のコマンドを実行します。
g++ --version
GCCのバージョン情報が表示されれば利用できます。
もし、
'g++' is not recognized
などのエラーが表示される場合は、GCCがインストールされていないか、実行ファイルの場所がPATH環境変数に追加されていない可能性があります。
MSVCを使用する場合
WindowsではMicrosoft製のMSVCを使用することもできます。
MSVCのC++コンパイラは、
cl.exe
です。
Visual StudioやVisual Studio Build Toolsをインストールすると利用できます。
MSVCはPATHだけでなくWindows SDKやライブラリ関連の環境変数も必要になるため、Developer Command PromptやDeveloper PowerShellなど、Visual Studio用の開発環境が設定されたターミナルからVSCodeを起動すると扱いやすくなります。
macOSでC++コンパイラを導入する
macOSでは一般的にClangを使用します。
まずターミナルで、次のコマンドを実行します。
clang++ --version
または、
clang --version
と入力します。
Clangがインストールされていない場合は、Command Line Toolsを導入します。
xcode-select --install
インストール後、再度バージョン確認を行います。
LinuxでC++コンパイラを導入する
LinuxではGCCのg++を利用する方法が一般的です。
UbuntuやDebian系Linuxでは、次のようにインストールできます。
sudo apt update
sudo apt install build-essential
インストール後に、
g++ --version
を実行し、バージョン情報が表示されれば準備完了です。
C++ファイルを作成する
コンパイラの準備ができたら、C++ファイルを作成します。
例えば、
hello.cpp
というファイルを作成し、次のコードを記述します。
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
ファイルを保存したら、ターミナルからコンパイルできます。
VSCodeのターミナルからC++をコンパイルする
GCCでコンパイルする
hello.cppが保存されているディレクトリで、次のコマンドを実行します。
g++ hello.cpp -o hello
それぞれの意味は次のとおりです。
g++
C++コンパイラを実行します。
hello.cpp
コンパイルするC++ソースファイルです。
-o hello
生成する実行ファイル名をhelloに指定します。
厳密には、このコマンドではソースコードのコンパイルだけでなく、通常はリンク処理まで行われ、最終的な実行ファイルが生成されます。
コンパイルしたプログラムを実行する
Windowsの場合
Windowsでは、一般的に次のような実行ファイルが生成されます。
hello.exe
PowerShellでは、次のように実行します。
.\hello.exe
macOS・Linuxの場合
macOSやLinuxでは、次のように実行します。
./hello
正常に動作すると、
Hello World!
と表示されます。
C++17・C++20・C++23を指定してコンパイルする
使用するC++規格を明示したい場合は、-stdオプションを使用します。
C++17を指定する
g++ -std=c++17 hello.cpp -o hello
C++20を指定する
g++ -std=c++20 hello.cpp -o hello
C++23を指定する
g++ -std=c++23 hello.cpp -o hello
Clangでも同様に、
clang++ -std=c++20 hello.cpp -o hello
のように指定できます。
ただし、利用できるC++規格や機能はコンパイラのバージョンによって異なります。
また、コンパイラのデフォルト規格はバージョンや環境によって異なるため、必要な規格がある場合は明示しておくと分かりやすくなります。
コンパイル時に警告を表示する
開発時には警告オプションを有効にしておくと、潜在的な問題を見つけやすくなります。
例えば、GCCやClangでは次のように指定できます。
g++ -std=c++20 -Wall -Wextra hello.cpp -o hello
さらに厳密にチェックしたい場合は、
g++ -std=c++20 -Wall -Wextra -pedantic hello.cpp -o hello
とする方法もあります。
-Wallは多くの代表的な警告を有効にしますが、文字どおりすべての警告を有効にするオプションではありません。
デバッグ情報を付けてコンパイルする
VSCodeのデバッガを使用する場合は、デバッグ情報を含めてコンパイルします。
GCCやClangでは、-gオプションを使用します。
g++ -g hello.cpp -o hello
警告やC++規格の指定と組み合わせる場合は、例えば次のようになります。
g++ -std=c++20 -Wall -Wextra -g hello.cpp -o hello
VSCodeからビルドする
毎回ターミナルでg++コマンドを入力しなくても、VSCodeのビルドタスクを利用できます。
ビルドタスクを利用する
C++ファイルを開き、コマンドパレットやC/C++拡張機能の実行・デバッグ機能からコンパイラを選択すると、必要に応じてVSCodeのビルド設定が作成されます。
環境によっては、
C/C++: g++ build active file
C/C++: clang++ build active file
C/C++: cl.exe build active file
などの項目が表示されます。
VSCodeのバージョンやC/C++拡張機能の状態によって、表示されるメニュー名や操作手順が多少異なる場合があります。
tasks.jsonでビルド設定を管理する
VSCodeでは、
.vscode/tasks.json
にビルドタスクを設定できます。
例えばGCCを使う場合は、次のような設定にできます。
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "g++",
"args": [
"-std=c++20",
"-Wall",
"-Wextra",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
tasks.jsonでよく使う変数
${file}
現在アクティブになっているファイルです。
${fileDirname}
現在のファイルが存在するディレクトリです。
${fileBasenameNoExtension}
拡張子を除いたファイル名です。
例えば、
C:\cpp\hello.cpp
を開いている場合、実質的には次のようなコマンドに相当します。
g++ -std=c++20 -Wall -Wextra -g hello.cpp -o hello
ショートカットでビルドする
デフォルトのビルドタスクを設定しておけば、WindowsやLinuxでは、
Ctrl + Shift + B
でビルドを実行できます。
例えば、
コードを書く
↓
Ctrl + Sで保存
↓
Ctrl + Shift + Bでビルド
↓
実行
という流れで開発できます。
複数のビルドタスクが設定されている場合は、実行するタスクの選択が必要になることがあります。
複数のC++ファイルをコンパイルする
C++では、複数のソースファイルを使用することがあります。
例えば、
main.cpp
calculator.cpp
calculator.hpp
という構成なら、
g++ main.cpp calculator.cpp -o app
とコンパイルできます。
C++20を使用するなら、
g++ -std=c++20 main.cpp calculator.cpp -o app
と指定します。
ワイルドカードを使用する場合の注意点
bashやzshなどの環境では、
g++ *.cpp -o app
のように複数の.cppファイルを指定できる場合があります。
ただし、ワイルドカードの展開はシェルやOSによって挙動が異なる可能性があります。
Windowsを含めた幅広い環境で確実に動作させたい場合は、
g++ main.cpp calculator.cpp -o app
のように、対象ファイルを明示する方法が分かりやすいでしょう。
コンパイルとビルドの違い
「コンパイル」と「ビルド」は、厳密には同じ意味ではありません。
コンパイルとは
コンパイルは、C++のソースコードをオブジェクトコードなどに変換する処理です。
例えば、
g++ -c main.cpp
を実行すると、一般的には、
main.o
というオブジェクトファイルが生成されます。
リンクとは
リンクは、複数のオブジェクトファイルやライブラリを組み合わせて、最終的な実行ファイルを作成する処理です。
例えば、
main.o
calculator.o
↓
app
という流れになります。
ビルドとは
一般的にビルドは、
コンパイル
+
リンク
+
必要に応じたその他の処理
をまとめた言葉です。
そのため、
g++ main.cpp calculator.cpp -o app
は日常的には「コンパイルする」と表現されることがありますが、実際にはコンパイルとリンクまで行っています。
tasks.jsonとc_cpp_properties.jsonの違い
VSCodeでC++を使用すると、
tasks.json
と、
c_cpp_properties.json
が登場することがあります。
この2つは役割が異なります。
tasks.jsonの役割
tasks.jsonは、VSCodeから実行するビルドタスクを設定するファイルです。
例えば、
どのコンパイラを使うか
どのオプションを付けるか
どのファイルをコンパイルするか
どの名前で実行ファイルを生成するか
などを設定できます。
実際のコンパイル時に、
g++ -std=c++20 ...
を使用したい場合は、tasks.jsonなどのビルド設定で-std=c++20をコンパイラに渡す必要があります。
c_cpp_properties.jsonの役割
c_cpp_properties.jsonは、主にMicrosoftのC/C++拡張機能が利用するIntelliSense設定を管理します。
例えば、
"compilerPath": "/usr/bin/g++"
のようにコンパイラの場所を指定できます。
また、
"cppStandard": "c++20"
と設定することもできます。
ただし、ここでcppStandardをc++20に設定しただけでは、実際のコンパイル時に自動で、
-std=c++20
が指定されるとは限りません。
つまり、
c_cpp_properties.json
→ IntelliSense・コード解析側の設定
tasks.json
→ 実際のビルドコマンド側の設定
と考えると分かりやすいでしょう。
なお、C/C++拡張機能がコンパイラを自動検出できる場合は、必ずしもc_cpp_properties.jsonを手動で作成する必要はありません。
launch.jsonの役割
launch.jsonは、主にデバッガの起動設定を管理するファイルです。
役割を整理すると、次のようになります。
| ファイル | 主な役割 |
|---|---|
| tasks.json | ビルドタスク |
| launch.json | デバッガの起動設定 |
| c_cpp_properties.json | IntelliSense設定 |
launch.jsonのpreLaunchTaskにビルドタスクを指定すると、
F5
↓
ビルド
↓
デバッグ開始
という流れを作ることもできます。
「g++が見つからない」と表示される場合
コンパイラがインストールされているか確認する
まず、
g++ --version
を実行します。
バージョン情報が表示されない場合は、GCCがインストールされていない可能性があります。
PATHを確認する
GCCがインストールされていても、実行ファイルがあるディレクトリがPATHに含まれていない場合は、VSCodeからg++を実行できません。
その場合は、GCCのインストール先やPATH環境変数を確認します。
iostreamに赤線が表示される場合
例えば、
#include <iostream>
に赤い波線が表示されることがあります。
この場合でも、必ずしもコンパイルエラーとは限りません。
IntelliSense設定に問題がある場合
主な原因には、次のようなものがあります。
- コンパイラが正しく検出されていない
compilerPathが間違っている- C++ツールチェーンが正しくインストールされていない
- IntelliSenseの設定と実際のビルド設定が一致していない
問題を切り分けるには、まずターミナルで、
g++ main.cpp -o main
を実行してみます。
これで正常にコンパイルできる場合は、C++コードやコンパイラではなく、VSCodeのIntelliSense側に問題がある可能性があります。
undefined referenceが表示される場合
GCC系の環境で、
undefined reference to ...
と表示される場合は、リンク関連の問題であることがよくあります。
例えば、
int add(int a, int b);
という宣言があり、実装がcalculator.cppにある場合、
g++ main.cpp -o app
だけでは実装がリンクされません。
次のように、必要なソースファイルも指定します。
g++ main.cpp calculator.cpp -o app
ただし、undefined referenceにはほかにも、
- 外部ライブラリをリンクしていない
- 関数の宣言と定義が一致していない
- 名前空間が異なっている
- テンプレートの定義場所に問題がある
など、さまざまな原因があります。
小規模なC++開発ならtasks.jsonでも対応できる
学習用途や小規模なプログラムなら、
VSCode
+
C/C++拡張機能
+
GCC・Clang・MSVC
+
tasks.json
という構成でも十分です。
例えば、
project/
├─ main.cpp
├─ calculator.cpp
├─ calculator.hpp
└─ .vscode/
├─ tasks.json
└─ launch.json
のような構成にできます。
本格的なC++プロジェクトではCMakeも検討する
ソースファイルやライブラリが増えてくると、tasks.jsonに直接すべてのビルド処理を書く方法では管理しにくくなります。
例えば、
src/
include/
tests/
external/
などの構成を持つプロジェクトでは、CMakeなどのビルド関連ツールを利用すると管理しやすくなります。
概念的には、
VSCode
↓
CMake
↓
Make / Ninjaなど
↓
GCC / Clang / MSVC
↓
実行ファイル
という構成になります。
CMake自体はC++コンパイラではなく、主にビルド方法を構成・生成するためのツールです。
VSCodeでC++をコンパイルする基本的な流れ
初心者の場合は、次の順番で覚えると分かりやすいでしょう。
1. VSCodeをインストール
↓
2. C/C++拡張機能をインストール
↓
3. GCC・Clang・MSVCを用意
↓
4. g++ --versionなどで確認
↓
5. main.cppを作成
↓
6. ターミナルから直接コンパイル
↓
7. 実行して動作確認
↓
8. tasks.jsonでビルドを自動化
↓
9. launch.jsonでデバッグ設定
↓
10. 必要に応じてCMakeなどを導入
最初からVSCodeの設定ファイルだけを編集するよりも、まず、
g++ main.cpp -o main
のようにターミナルから直接コンパイルすると、VSCodeとコンパイラの役割を理解しやすくなります。
まとめ
VSCodeでC++をコンパイルするには、VSCode本体とC/C++拡張機能だけでなく、GCC・Clang・MSVCなどのC++コンパイラが必要です。
最初はターミナルから、
g++ -std=c++20 -Wall -Wextra main.cpp -o main
のように直接コンパイルすると、C++のビルドの仕組みを理解しやすくなります。
慣れてきたらtasks.jsonを設定してショートカットからビルドできるようにし、launch.jsonを組み合わせることでデバッグも効率化できます。
また、c_cpp_properties.jsonは主にIntelliSenseの設定に使われるため、実際のコンパイル設定とは役割が異なる点にも注意が必要です。
ソースファイルが増えてプロジェクトが複雑になってきた場合は、CMakeやMake、Ninjaなどのビルド関連ツールを活用すると、より管理しやすいC++開発環境を構築できます。
以上、VSCodeでC++をコンパイルする方法についてでした。
最後までお読みいただき、ありがとうございました。










