【C++】Visual Studio CodeでMakefileを実行する方法【Windows】

VSCodeでMakefileを実行

WindowsでC++のプログラムをビルドするときはVisual Studioを使うことが多いです。
ただちょっとしたコンソールアプリを作ったり、他のプラットフォームに移植しづらかったりするデメリットもあります。
LinuxではMakefileを使うのが一般的なのでWindowsでもMakefileでビルドできるようにしておけばOSに依存しない開発環境が構築できます。
そこで今回は、Windows環境でMakefileVisual 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.cppcalc.cppmain.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は最適化なし)
SRCsrcフォルダ内のすべての .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

コメント

タイトルとURLをコピーしました