# 
# 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)