Makefile を作成するプロセスは次のとおりです。
- 変数の定義: コンパイラやコンパイル オプションなどの変数を定義します。
- ターゲットファイルの定義: ターゲットファイル名を定義します。
- ソース ファイルの定義: すべてのソース ファイルを定義します。
- ルールの定義: 各ソース ファイルをオブジェクト ファイルにコンパイルするためのルールを定義します。
- 擬似ターゲットの定義: オブジェクト ファイルおよびその他の中間ファイルをクリーンアップする擬似ターゲットを定義します。
CC = gcc
CFLAGS = -Wall -Wextra -Werror
SOURCES := $(wildcard *.c)
TARGETS := $(patsubst %.c, %, $(SOURCES))
all: $(TARGETS)
%: %.c
$(CC) $(CFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f $(TARGETS)
CC
使用するコンパイラを定義します。ここでは gcc が使用されます。CFLAGS
コンパイル オプションが定義され、いくつかの警告オプションがここで有効になります。SOURCES
すべてのソース ファイルのリストです。ワイルドカードを使用して、現在のディレクトリ内で で終わる*.c
すべてのファイルを検索します。.c
TARGETS
すべての実行可能ファイルのリストです。patsubst 関数を使用して、ソース ファイル パスを実行可能ファイル パス (ファイル拡張子を削除したもの) に置き換えます。all: $(TARGETS)
すべてがすべての実行可能ファイルに依存し、すべての実行可能ファイルはコマンド ラインに入力することで生成できることを示します。$ make
%: %.c
ルールを示し、.c
ファイルを対応する実行可能ファイルにコンパイルし、ソース ファイルと同じ名前のファイルに保存します。.PHONY: clean
clean が実際のファイルではなく疑似ターゲットであり、$ make clean
コマンド ラインに入力することですべての実行可能ファイルを削除できることを示します。