GCC = gcc CFLAGS = -g -Wall -Wshadow LIBS = SOURCES = answer06.c pa06.c TARGET = pa06 TESTN := $(shell seq 0 4) # ------------------------------------------------------------- TESTS := $(addprefix test,${TESTN}) .PHONY : all build clean environment help testall $(TESTS) .DEFAULT_GOAL := build OBJF = obj OBJS = $(patsubst %.c,$(OBJF)/%.o,$(SOURCES)) -include $(SOURCES:%=$(OBJF)/%.P) all: | build testall testall: | test0 test1 test2 test3 test4 build: $(TARGET) clean: @cd $(CURDIR) rm -rf $(TARGET) $(OBJF) outputs environment: @cd $(CURDIR) @mkdir -p outputs @mkdir -p $(OBJF) help: @echo @echo " make Build $(TARGET)" @echo " make testall Run /all/ testcases" @echo " make clean Remove all temporary files" @echo " make help Print this message" $(TARGET): $(OBJS) | environment $(GCC) $(CFLAGS) $(OBJS) $(LIBS) -o $@ $(OBJF)/%.o: %.c | environment @$(GCC) -MM $(CFLAGS) $< | sed 's,^\([^ ]\),$(OBJF)\/\1,g' | sed '$$ s,$$, \\,' > $(OBJF)/$<.P $(GCC) $(CFLAGS) -c -o $@ $< test0: $(TARGET) | environment @./bin/test.sh "$(TARGET)" images/01-unnormalized-smile.ee264 outputs/01-smile.ppm expected/01-smile.ppm outputs/valgrind-log0 test1: $(TARGET) | environment @./bin/test.sh "$(TARGET)" images/02-unnormalized-cat-chess.ee264 outputs/02-cat-chess.ppm expected/02-cat-chess.ppm outputs/valgrind-log1 test2: $(TARGET) | environment @./bin/test.sh "$(TARGET)" images/03-unnormalized-hawkes-bay-NZ.ee264 outputs/03-hawkes-bay-NZ.ppm expected/03-hawkes-bay-NZ.ppm outputs/valgrind-log2 test3: $(TARGET) | environment @./bin/test.sh "$(TARGET)" images/04-unnormalized-nelsonmandela.ee264 outputs/04-nelsonmandela.ppm expected/04-nelsonmandela.ppm outputs/valgrind-log3 test4: $(TARGET) | environment @./bin/test.sh "$(TARGET)" images/05-unnormalized-sagan-stamp.ee264 outputs/05-sagan-stamp.ppm expected/05-sagan-stamp.ppm outputs/valgrind-log4