VSCode(Visual Studio Code)でC++をビルドするには、VSCode本体に加えてC++コンパイラを用意する必要があります。
VSCodeはコードを編集するためのエディタであり、C++のソースコードを直接コンパイルする機能は備えていません。
そのため、WindowsではMSVCやMinGW-w64、macOSではClang、LinuxではGCCやClangなどのコンパイラを組み合わせて使用します。
VSCodeでC++をビルドする基本的な流れは、次のようになります。
VSCodeをインストール
↓
C/C++拡張機能をインストール
↓
C++コンパイラをインストール
↓
.cppファイルを作成
↓
コンパイラでビルド
↓
生成された実行ファイルを実行
C++を学習するときは、まずこの基本的な仕組みを理解しておくことが重要です。
VSCodeでC++をビルドする仕組み
C++では、作成した.cppファイルをそのまま実行することはできません。
ソースコードをコンパイラに渡し、実行可能なファイルへ変換する必要があります。
たとえば、次のようなmain.cppがあるとします。
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
GCCのC++コンパイラであるg++を使用する場合は、次のようにビルドできます。
g++ main.cpp -o main
Windowsでは、環境によって次のような実行ファイルが生成されます。
main.exe
LinuxやmacOSでは、一般的に次のような実行ファイルが生成されます。
main
つまり、VSCode自身がC++をコンパイルしているのではありません。
VSCodeからGCC、Clang、MSVCなどの外部コンパイラを呼び出してビルドしています。
VSCodeにC/C++拡張機能をインストールする
VSCodeでC++を開発する場合は、Microsoftが提供している「C/C++」拡張機能を利用するのが一般的です。
VSCode左側の「Extensions」を開き、次の名前で検索します。
C/C++
提供元がMicrosoftになっている拡張機能をインストールします。
C/C++拡張機能でできること
C/C++拡張機能を導入すると、主に次のような機能を利用できます。
- IntelliSenseによるコード補完
- シンタックスチェック
- 定義や参照先へのジャンプ
- コードナビゲーション
- デバッグ
- ブレークポイント
- コンパイラ設定との連携
ただし、C/C++拡張機能にはC++コンパイラそのものは含まれていません。
そのため、GCC、Clang、MSVCなどを別途インストールする必要があります。
OSごとにC++コンパイラを用意する
使用するコンパイラはOSによって異なります。
代表的な構成は次のとおりです。
| OS | 主なコンパイラ |
|---|---|
| Windows | MSVC |
| Windows | GCC / MinGW-w64 |
| Windows + WSL | GCC / Clang |
| macOS | Clang |
| Linux | GCC / Clang |
どのコンパイラを選んでもC++を開発できますが、OSや開発環境によって使いやすさが異なります。
WindowsでC++をビルドする方法
Windowsでは、主にMSVCまたはMinGW-w64を利用します。
MSVCを使用する方法
MSVCはMicrosoftが提供しているC/C++コンパイラです。
Visual Studio本体をインストールしなくても、Visual Studio Build Toolsを使用できます。
MSVCのコンパイラは次のコマンドです。
cl.exe
必要な環境設定が完了しているターミナルでは、次のようにビルドできます。
cl main.cpp
正常にビルドされると、main.exeなどの実行ファイルが生成されます。
MSVCはDeveloper Command Promptから起動する
MSVCを利用するときに注意したいのが、通常のPowerShellやコマンドプロンプトではcl.exeを認識できない場合があることです。
MSVCでは、コンパイラやライブラリへのパスなど、専用の環境変数を設定する必要があります。
そのため、Developer Command Prompt for Visual Studioを開き、プロジェクトフォルダで次のコマンドを実行すると分かりやすいでしょう。
code .
この方法で起動すると、MSVCに必要な環境変数を引き継いだ状態でVSCodeを使用できます。
WindowsでMinGW-w64を使用する方法
WindowsでGCCを使用したい場合は、MinGW-w64を利用できます。
MSYS2などを使ってMinGW-w64環境を構築する方法があります。
インストール後は、VSCodeのターミナルで次のコマンドを実行します。
g++ --version
バージョン情報が表示されれば、g++を使用できる状態です。
表示されない場合は、MinGW-w64のbinディレクトリがWindowsのPATHに登録されているか確認します。
MinGW-w64でC++をビルドする
main.cppをビルドする場合は、次のように実行します。
g++ main.cpp -o main.exe
実行する場合は、PowerShellなら次のように入力します。
.\main.exe
Windowsでは出力ファイル名に.exeを付けておくと、実行ファイルであることが分かりやすくなります。
macOSでC++をビルドする方法
macOSでは、Clangを使用する方法が一般的です。
まず、ターミナルで次のコマンドを実行します。
clang++ --version
バージョン情報が表示されれば、Clangを使用できます。
main.cppをビルドする場合は、次のように実行します。
clang++ main.cpp -o main
実行するときは次のようにします。
./main
LinuxでC++をビルドする方法
Linuxでは、GCCのg++を使用する方法が一般的です。
まず、次のコマンドでインストール状況を確認します。
g++ --version
利用できる状態であれば、次のコマンドでビルドできます。
g++ main.cpp -o main
実行するときは次のとおりです。
./main
VSCodeのターミナルからC++をビルドする
C++コンパイラの準備ができたら、最も簡単なのはVSCodeのターミナルから直接ビルドする方法です。
たとえば、次のようなフォルダ構成があるとします。
project/
└── main.cpp
VSCodeでprojectフォルダを開き、ターミナルから次のコマンドを実行します。
g++ main.cpp -o main
Windowsの場合は、次のように実行できます。
.\main.exe
LinuxやmacOSでは次のように実行します。
./main
C++17やC++20を指定してビルドする
C++では、使用する言語規格を指定してビルドできます。
C++17を使用する場合
g++ -std=c++17 main.cpp -o main
C++20を使用する場合
g++ -std=c++20 main.cpp -o main
C++23を使用する場合
g++ -std=c++23 main.cpp -o main
どの規格を利用できるかは、使用しているコンパイラのバージョンによって異なります。
新しいC++規格を利用する場合は、コンパイラが対応しているか確認しておきましょう。
tasks.jsonを使ってC++をビルドする
毎回ターミナルにビルドコマンドを入力するのが面倒な場合は、VSCodeのtasks.jsonを利用すると便利です。
tasks.jsonには、VSCodeから実行するビルドコマンドを登録できます。
ファイルは通常、次の場所に作成されます。
.vscode/tasks.json
g++用のtasks.jsonの例
現在開いているC++ファイルをGCCでビルドする場合は、次のような設定ができます。
{
"version": "2.0.0",
"tasks": [
{
"label": "C++ Build",
"type": "shell",
"command": "g++",
"args": [
"-std=c++17",
"-Wall",
"-Wextra",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
WindowsでMinGW-w64を使用する場合は、出力ファイル名に.exeを付けると分かりやすくなります。
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
tasks.jsonの主な設定項目
label
"label": "C++ Build"
タスクの名前です。
VSCodeのタスク一覧に表示されます。
command
"command": "g++"
実行するコマンドを指定します。
GCCならg++、Clangならclang++などを指定します。
args
"args": [
"-std=c++17",
"-Wall",
"-Wextra",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
]
コンパイラに渡すオプションを指定します。
この設定は、実質的には次のようなコマンドを実行していることになります。
g++ -std=c++17 -Wall -Wextra -g main.cpp -o main
VSCodeで使える変数
tasks.jsonでは、VSCodeが用意している変数を利用できます。
${file}
現在開いているファイルを表します。
たとえば、main.cppを開いている場合は、そのファイルのフルパスに置き換えられます。
${fileDirname}
現在開いているファイルが保存されているディレクトリを表します。
${fileBasenameNoExtension}
拡張子を除いたファイル名を表します。
たとえば、次のファイルなら、
main.cpp
次の値になります。
main
${workspaceFolder}
VSCodeで開いているワークスペースフォルダを表します。
複数のファイルを扱うプロジェクトで利用されることがあります。
ショートカットでC++をビルドする
tasks.jsonでビルドタスクを設定すると、「Run Build Task」からビルドできます。
WindowsとLinuxでは、一般的に次のショートカットを使用します。
Ctrl + Shift + B
macOSでは次のショートカットです。
Shift + Command + B
つまり、
コードを書く
↓
保存する
↓
Ctrl + Shift + B
↓
ビルド
という流れでC++を開発できます。
複数のC++ファイルをビルドする方法
実際のC++プロジェクトでは、複数の.cppファイルを使用することがあります。
たとえば次の構成です。
project/
├── main.cpp
├── calculator.cpp
└── calculator.hpp
この場合は、次のように.cppファイルを指定します。
g++ main.cpp calculator.cpp -o app
Windowsなら次のようにしてもよいでしょう。
g++ main.cpp calculator.cpp -o app.exe
ヘッダーファイルは通常コンパイル対象に指定しない
calculator.hppのようなヘッダーファイルは、通常はビルドコマンドに直接指定しません。
ソースコード側から次のように読み込みます。
#include "calculator.hpp"
そのため、ビルド対象として指定するのは基本的に.cppファイルです。
WindowsのMinGW-w64では*.cppの指定に注意する
複数ファイルをビルドするとき、次のような指定を見かけることがあります。
"${workspaceFolder}/*.cpp"
macOSやLinuxなど、シェルがワイルドカードを展開する環境では利用できる場合があります。
しかし、WindowsのMSYS2/MinGW-w64ではワイルドカードの扱いに注意が必要です。
現在の環境では、*.cppが期待どおり展開されない場合があります。
WindowsのMinGW-w64では、次のようにファイルを明示する方法が確実です。
"args": [
"-std=c++17",
"${workspaceFolder}/main.cpp",
"${workspaceFolder}/calculator.cpp",
"-o",
"${workspaceFolder}/app.exe"
]
ソースファイルの数が増えてきた場合は、tasks.jsonですべて管理するのではなく、CMakeやMakeなどのビルドシステムを利用すると管理しやすくなります。
tasks.jsonとc_cpp_properties.jsonの違い
VSCodeでC++を使用するときは、tasks.jsonとc_cpp_properties.jsonを混同しないことが重要です。
tasks.json
tasks.jsonは、主に実際のビルドコマンドを設定するファイルです。
たとえば次のような内容を設定します。
"command": "g++"
つまり、
どのコンパイラを使うか
どのオプションを渡すか
どのファイルをビルドするか
などを設定します。
c_cpp_properties.json
c_cpp_properties.jsonは、主にC/C++拡張機能のIntelliSense設定を行うファイルです。
たとえば、次のような設定があります。
compilerPath
includePath
defines
cppStandard
intelliSenseMode
そのため、c_cpp_properties.jsonを設定してIntelliSenseのエラーが消えても、実際のコンパイルが成功するとは限りません。
逆に、実際のビルドは成功していても、IntelliSense側の設定が合っていないことで赤い波線が表示される場合もあります。
c_cpp_properties.jsonは必須ではない
c_cpp_properties.jsonは必ず作成しなければならないファイルではありません。
C/C++拡張機能がコンパイラを自動検出して設定する場合もあります。
また、CMake ToolsなどからIntelliSense設定を取得することもできます。
そのため、必要になったときに手動で設定するファイルと考えると分かりやすいでしょう。
C++のビルドと実行の違い
C++初心者の場合は、「ビルド」と「実行」を区別しておくことも重要です。
ビルド
次のコマンドはビルドです。
g++ main.cpp -o main
ソースコードから実行ファイルを作成しています。
実行
LinuxやmacOSなら次のコマンドで実行します。
./main
Windowsなら次のように実行します。
.\main.exe
つまり、
main.cpp
↓
ビルド
↓
mainまたはmain.exe
↓
実行
という流れになります。
コンパイルとビルドの違い
「コンパイル」と「ビルド」は、厳密には同じ意味ではありません。
C++では一般的に、次のような処理が行われます。
プリプロセス
↓
コンパイル
↓
アセンブル
↓
リンク
↓
実行ファイル
コンパイルは、主にソースコードを目的コードなどへ変換する工程を指します。
一方、ビルドはコンパイルやリンクなどを含み、最終的な実行ファイルを生成する一連の処理を指すことが一般的です。
C++のビルドでよく使用するオプション
C++をビルドするときは、いくつかのオプションを覚えておくと便利です。
-o
出力するファイル名を指定します。
g++ main.cpp -o app
-std
使用するC++規格を指定します。
g++ -std=c++17 main.cpp -o app
-Wall
代表的な警告を有効にします。
g++ -Wall main.cpp -o app
-Wallは名前に「all」とありますが、すべての警告を有効にするオプションではありません。
-Wextra
追加の警告を有効にします。
g++ -Wall -Wextra main.cpp -o app
-g
デバッグ情報を付加します。
g++ -g main.cpp -o app
GDBなどを利用してVSCodeからデバッグするときに役立ちます。
-O2
コンパイラの最適化を有効にします。
g++ -O2 main.cpp -o app
ただし、デバッグ時に強い最適化を有効にすると、ソースコードと実際の処理の対応が分かりにくくなる場合があります。
開発時におすすめのビルドコマンド
学習や開発中であれば、次のようなコマンドが使いやすいでしょう。
g++ -std=c++17 -Wall -Wextra -g main.cpp -o main
それぞれの意味は次のとおりです。
-std=c++17
→ C++17を使用する
-Wall
→ 代表的な警告を表示する
-Wextra
→ 追加の警告を表示する
-g
→ デバッグ情報を追加する
-o main
→ mainという名前で出力する
Windowsであれば、次のようにしてもよいでしょう。
g++ -std=c++17 -Wall -Wextra -g main.cpp -o main.exe
CMakeを使ってC++をビルドする
C++プロジェクトの規模が大きくなると、tasks.jsonだけでビルド設定を管理するのが大変になります。
そのような場合は、CMakeなどのビルドシステムを利用すると便利です。
たとえば次のような構成があるとします。
project/
├── CMakeLists.txt
└── src/
├── main.cpp
└── calculator.cpp
CMakeLists.txtは、次のように記述できます。
cmake_minimum_required(VERSION 3.20)
project(MyApp)
set(CMAKE_CXX_STANDARD 17)
add_executable(MyApp
src/main.cpp
src/calculator.cpp
)
設定を生成する場合は次のコマンドを実行します。
cmake -S . -B build
その後、次のコマンドでビルドします。
cmake --build build
VSCodeではCMake Tools拡張機能を利用することで、CMakeプロジェクトの設定やビルドをGUIから操作することもできます。
小規模プロジェクトとCMakeの使い分け
C++を学習している段階で、main.cppだけをビルドするのであれば、ターミナルから直接g++を実行するだけでも十分です。
数ファイル程度の小さなプロジェクトであれば、tasks.jsonによるビルドも便利です。
一方で、次のような要素が増えてきた場合はCMakeなどを検討するとよいでしょう。
複数のソースファイル
複数のディレクトリ
外部ライブラリ
DebugとReleaseの切り替え
複数の実行ファイル
テストプログラム
ただし、大規模プロジェクトでは必ずCMakeを使用しなければならないわけではありません。
Make、Ninja、Meson、Bazelなど、プロジェクトによってさまざまなビルドシステムが利用されています。
VSCodeでC++をビルドできないときの確認ポイント
C++をビルドできない場合は、いくつかのポイントを順番に確認しましょう。
コンパイラがインストールされているか
GCCなら次のコマンドを実行します。
g++ --version
Clangなら次のとおりです。
clang++ --version
バージョン情報が表示されなければ、コンパイラがインストールされていないか、PATHが正しく設定されていない可能性があります。
PATHが設定されているか
コンパイラをインストールしていても、PATHが設定されていなければVSCodeから呼び出せません。
たとえば、次のようなエラーが表示される場合があります。
g++ is not recognized
この場合は、g++.exeが存在するディレクトリをPATHに追加します。
gccではなくg++を使用しているか
GCC環境では、次の2つのコマンドがあります。
gcc
g++
C++のビルドでは、基本的にg++を使用すると分かりやすいでしょう。
g++ main.cpp -o main
g++を使用すると、C++標準ライブラリのリンクも適切に処理されます。
ファイルを保存しているか
コードを変更しても保存していない場合、変更前の内容がビルドされることがあります。
WindowsやLinuxでは、
Ctrl + S
macOSでは、
Command + S
で保存してからビルドすると確実です。
tasks.jsonのcommandが正しいか
tasks.jsonでコンパイラを指定している場合は、commandが正しいか確認します。
たとえば、PATHを利用せずにフルパスで指定することもできます。
"command": "C:/msys64/mingw64/bin/g++.exe"
実際のパスは環境によって異なるため、自分のPCにインストールされている場所を確認してください。
VSCodeでC++をビルドする基本手順
VSCodeでC++をビルドするときは、まず次の基本的な流れを覚えておくとよいでしょう。
1. VSCodeをインストール
↓
2. C/C++拡張機能をインストール
↓
3. GCC・Clang・MSVCなどをインストール
↓
4. コンパイラが使えるか確認
↓
5. main.cppを作成
↓
6. コンパイラでビルド
↓
7. 生成された実行ファイルを実行
最初は、VSCodeのターミナルから直接次のようなコマンドを実行するだけでも十分です。
g++ main.cpp -o main
慣れてきたらtasks.jsonを設定し、
Ctrl + Shift + B
でビルドできるようにすると、開発効率が上がります。
さらに複数ファイルや外部ライブラリを扱うようになった場合は、CMakeなどのビルドシステムを導入すると管理しやすくなります。
VSCodeでC++をビルドするときに最も重要なのは、VSCode自身がC++をコンパイルしているのではなく、GCC・Clang・MSVCなどの外部コンパイラをVSCodeから実行していると理解しておくことです。
この仕組みを理解しておけば、コンパイラが見つからない場合や、tasks.jsonのビルド設定で問題が発生した場合でも、原因を切り分けやすくなります。
以上、VSCodeでC++をビルドする方法についてでした。
最後までお読みいただき、ありがとうございました。










