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