WindowsでC++のプログラムをビルドするときはVisual Studioを使うことが多いです。
ただちょっとしたコンソールアプリを作ったり、他のプラットフォームに移植しづらかったりするデメリットもあります。
LinuxではMakefileを使うのが一般的なのでWindowsでもMakefileでビルドできるようにしておけばOSに依存しない開発環境が構築できます。
そこで今回は、Windows環境でMakefileとVisual Studio Codeを使ってC++のビルド環境を構築する手順についてまとめました。
1. MinGWのインストール
Visual StudioではMSVCと呼ばれるコンパイラを使用しています。
これをMakefileで使おうとすると設定が複雑だったり結局Windows専用になってしまったりするのでMinGWと呼ばれるツールをインストールします。
MinGWはWindowsでGNUツール(gccやmakeコマンドなど)が使えるようになるツールです。
まずはこちらのサイトにアクセスします。
右側に「Releases」という項目があるので、こちらをクリックします。

少し下に「Assets」という項目があるので、ここの「w64devkit-x64-2.4.0.7z.exe」をダウンロードします。

ダウンロードが完了したらEXEファイルを起動します。

フォルダを解凍する場所を指定してExtractを押します。

次にシステム環境変数を開きます。

Pathを選択して「編集」をクリックします。

環境変数名の編集ウィンドウが開くので、新規をクリックします。

そして、先ほど解凍したw64devkitフォルダ内のbinフォルダを選択してOKを押します。

環境変数の設定が完了したら設定を反映させるためPCを再起動させます。
コマンドプロンプトを開き、「make」と入力して以下のようなメッセージが表示されたら設定完了です。

2. Visual Studio Codeの設定
次にVisual Studio Codeの設定を行います。
まず任意の場所にプロジェクト用フォルダを作成し、その中にソースファイルを入れるsrcフォルダを作成します。
今回はmakefile_testというフォルダを作成し、その中にsrcフォルダを作成しました。

次にVisual Studio Codeを開き、先ほど作成したmakefile_testフォルダを開きます。
そしてsrcフォルダの中にソースファイルとヘッダーファイルを作成します。
今回はmain.cpp、calc.cpp、main.hを作成しました。
calc.cppに足し算の関数を作成し、main.hに定義してmain.cppのmain関数で呼び出します。
#include <iostream>
#include "main.h"
int main(void){
int a = 1;
int b = 2;
int c = calc_add(a, b);
std::cout << "結果:" << c << std::endl;
return 0;
}
#include <iostream>
#include "main.h"
int calc_add(int a, int b){
return a + b;
}
#pragma once
int calc_add(int a, int b);
これでソースコードの準備ができました。
2.1. tasks.jsonの設定
次にtasks.jsonの設定を行います。
tasks.jsonはVSCodeでビルドや実行を自動化するための設定ファイルです。
まずCtrl+Shift+Pでコマンドパレットを開き、taskと入力します。
するとタスクに関する項目が表示されるので「タスク:タスクの実行」を選択します。

次に「タスクの構成」を選択します。

「テンプレートからtasks.jsonを生成」を選択します。

そしてOthersを選択すると、.vscodeというフォルダが生成されてその中にtasks.jsonが生成されます。

テンプレートのままでは動作しないので、Makefileでビルドできるように書き換えます。
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "C:\\w64devkit\\bin\\make.exe",
"args": [],
"group": { "kind": "build", "isDefault": true },
"problemMatcher": ["$gcc"],
"presentation": { "reveal": "always" }
},
{
"label": "clean",
"type": "shell",
"command": "C:\\w64devkit\\bin\\make.exe",
"args": ["clean"],
"problemMatcher": []
}
]
}
2.2. launch.jsonの設定
次にlaunch.jsonの設定を行います。
launch.jsonはVisual Studio Codeのデバッグ設定を記述するファイルです。
まず、タスクメニューの実行から「構成の追加」を選択します。

デバッガを選択する画面に切り替わるので「C++(GDB/LLDB)」を選択します。

すると.vscodeフォルダにlaunch.jsonが生成されます。

こちらもMakefileでビルドできるように書き換えます。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\w64devkit\\bin\\gdb.exe",
"setupCommands": [
{
"description": "gdb の再フォーマットを有効にする",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "逆アセンブリ フレーバーを Intel に設定",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
}
]
}
3. Makefileの準備
次にMakefileを作成します。
Makefileは開いているフォルダ直下に作成します。

今回はsrcフォルダにmain.cpp、calc.cpp、main.hを作成し、buildフォルダにmain.exeを出力するようなMakefileを記述します。
# コンパイラとオプション
CXX = g++
CXXFLAGS = -g -O0 -std=c++17
# 出力ファイル
TARGET = build/main.exe
# ソース・オブジェクトファイル
SRC = $(wildcard src/*.cpp)
OBJ = $(patsubst src/%.cpp, build/%.o, $(SRC))
# デフォルトターゲット
all: $(TARGET)
# exeの生成ルール
$(TARGET): $(OBJ)
@if not exist build mkdir build
$(CXX) $(CXXFLAGS) -o $@ $^
# オブジェクトファイルの生成ルール
build/%.o: src/%.cpp
@if not exist build mkdir build
$(CXX) $(CXXFLAGS) -c -o $@ $<
# クリーンアップ
clean:
@if exist build\main.exe del /q build\main.exe
@if exist build\*.o del /q build\*.o
| 引数 | 内容 |
|---|---|
| CXX | 使用するC++コンパイラ(g++) |
| CXXFLAGS | コンパイルオプション(-gはデバッグ情報付き、-O0は最適化なし) |
| SRC | srcフォルダ内のすべての .cpp ファイルを自動検出 |
| OBJ | それらに対応する build 内の .o ファイル名を自動生成 |
| TARGET | 出力する実行ファイルのパス |
4. 動作確認
それでは実際にMakefileでビルドできるか確認してみます。
タスクメニューの実行から「デバッグの開始」を押すかF5キーでデバッグできます。

結果は以下の通りです。

今回は以上です。
5. 参考サイト
・WindowsにMinGW-w64をインストールする 2025年版
https://qiita.com/yomei_o/items/2e706a5fa3ac5ffc3a50
・C/C++をVSCodeで開発するための環境構築
https://qiita.com/ochx/items/01449d09777187790ee4
・Makefileの書き方
https://zenn.dev/yagiyuki/articles/b5545c3b546bbeb662bf
・tasks.json の作成
https://inno-tech-life.com/dev/linux/vscode_tasks/#index_id2



コメント