#
# Makefile ... コンパイルに使うファイルの依存関係
#
# make によるコンパイル
# make … 更新したファイルだけをコンパイル
# make clean … オブジェクトファイルと実行ファイルを削除
# make cleanall … 生成した全ファイルを削除
# 生成するファイルの名前の指定 (必要に応じて変更)
OBJ1 = base.o tokenizer.o a1.o
EXE1 = a1
TXT1 = a1.txt
OBJ2 = base.o tokenizer.o a2.o
EXE2 = a2
TXT2 = a2.txt
OBJ3 = base.o tokenizer.o a3.o
EXE3 = a3
TXT3 = a3.txt
OBJ4 = base.o tokenizer.o a4.o
EXE4 = a4
TXT4 = a4.txt
#######################################################################
# 通常,以下は書き換え不要
# 生成する全ファイル名の指定
ALLOBJ = $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4)
ALLEXE = $(EXE1) $(EXE2) $(EXE3) $(EXE4)
ALLTXT = $(TXT1) $(TXT2) $(TXT3) $(TXT4)
# コンパイラの指定
CC = gcc
CFLAGS = -std=c99 -Wall -W # 全ての警告を表示
# 全ファイルを作る規則
all: $(ALLTXT)
# テキストファイルを作る規則
$(TXT1): $(EXE1)
- ./$(EXE1) > $@
$(TXT2): $(EXE2)
- ./$(EXE2) > $@
$(TXT3): $(EXE3)
- ./$(EXE3) > $@
$(TXT4): $(EXE4)
- ./$(EXE4) > $@
# 実行ファイルを作る規則
$(EXE1): $(OBJ1)
$(CC) $(CFLAGS) $^ -o $@
$(EXE2): $(OBJ2)
$(CC) $(CFLAGS) $^ -o $@
$(EXE3): $(OBJ3)
$(CC) $(CFLAGS) $^ -o $@
$(EXE4): $(OBJ4)
$(CC) $(CFLAGS) $^ -o $@
# オブジェクトファイルを作る規則
.SUFFIXES: .h .c .o
.h.c:
touch $*.c
.c.o:
$(CC) $(CFLAGS) -c $<
# ファイルを消す規則
clean:
rm -f $(ALLEXE) $(ALLOBJ)
cleanall:
rm -f $(ALLEXE) $(ALLOBJ) $(ALLTXT)