カテゴリ: C++ 更新日: 2025/12/14

Makefileでの変数と自動変数の使い方を初心者向けに解説

Makefileでの変数と自動変数の使い方
Makefileでの変数と自動変数の使い方

先生と生徒の会話形式で理解しよう

生徒

「先生、Makefileで毎回同じコンパイルコマンドを書くのは大変です。便利な方法はありますか?」

先生

「あります。それがMakefileの変数自動変数です。プログラムの管理を簡単にする魔法のような仕組みです。」

生徒

「魔法ですか!具体的にはどんな感じですか?」

先生

「例えば、コンパイラやコンパイルオプションを変数にまとめることで、何度も同じ文字列を書く必要がなくなります。自動変数を使うと、ターゲットや依存ファイルの名前を自動的に取得して便利です。」

1. Makefileの変数とは?

1. Makefileの変数とは?
1. Makefileの変数とは?

Makefileの変数は、値を名前に置き換えて管理するための仕組みです。例えば、コンパイラの名前やオプション、ソースファイルのリストなどを変数に入れることで、Makefile全体をシンプルに保つことができます。

例として、コンパイラとコンパイルオプションを変数で定義する方法です。


CC = g++
CFLAGS = -Wall -g
SRC = main.cpp utils.cpp
OBJ = $(SRC:.cpp=.o)
TARGET = my_program

ここでは、CCがコンパイラ、CFLAGSがコンパイルオプション、SRCがソースファイル、OBJがオブジェクトファイルのリスト、TARGETが生成する実行ファイルです。

2. 自動変数とは?

2. 自動変数とは?
2. 自動変数とは?

Makefileには特別な自動変数が用意されていて、ターゲットや依存ファイルの名前を自動で取得できます。よく使う自動変数は以下の通りです。

  • $@ : 現在のターゲット名
  • $< : 最初の依存ファイル名
  • $^ : すべての依存ファイル名

例えば、オブジェクトファイルを作るルールで使うと便利です。


%.o: %.cpp
    $(CC) $(CFLAGS) -c $< -o $@

この例では、main.cppが依存ファイルの場合、$<main.cppに置き換わり、$@main.oに置き換わります。

3. 変数と自動変数を組み合わせたMakefile例

3. 変数と自動変数を組み合わせたMakefile例
3. 変数と自動変数を組み合わせたMakefile例

CC = g++
CFLAGS = -Wall -g
SRC = main.cpp utils.cpp
OBJ = $(SRC:.cpp=.o)
TARGET = my_program

all: $(TARGET)

$(TARGET): $(OBJ)
    $(CC) $(CFLAGS) $^ -o $@

%.o: %.cpp
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f $(OBJ) $(TARGET)

このMakefileでは、ソースファイルを追加しても、変数と自動変数のおかげでコンパイルルールを書き換える必要がほとんどありません。

4. 変数と自動変数を使うメリット

4. 変数と自動変数を使うメリット
4. 変数と自動変数を使うメリット
  • 同じ情報を何度も書かなくて済むのでMakefileがシンプル
  • ソースファイルを追加・削除してもルールの修正が少ない
  • 可読性が高く、初心者でも理解しやすい
  • 自動変数でルールの汎用性が上がる

初心者でも、これらの仕組みを使うことでMakefileを効率よく管理でき、C++のプロジェクト構築が楽になります。

カテゴリの一覧へ
新着記事
New1
C++
C++の変数のスコープと有効範囲を完全解説!初心者でもわかる基本と考え方
New2
C++
C++とは?歴史と特徴を初心者向けに解説!Rustとの違いとモダン言語比較
New3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
New4
Rust
Rust開発環境をLinuxで構築する方法とおすすめ設定を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.3
Java&Spring記事人気No3
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.6
Java&Spring記事人気No6
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.7
Java&Spring記事人気No7
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.8
Java&Spring記事人気No8
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド