CC = gcc CFLAGS = -g -Wall -Wpedantic -std=c89 TARGET = parc BASENM = piece-table SRC = $(addsuffix .c, $(addprefix src/, $(BASENM)) ) OBJDIR = out OBJ = $(addsuffix .o, $(addprefix $(OBJDIR)/, $(BASENM))) HEADERS = $(wildcard src/*.h) TEST := \ piece-table-delete \ piece-table-insert \ piece-table-internals TEST_FILES = $(addprefix tests/, $(TEST)) TEST_LOGS = $(addsuffix .log, $(TEST_FILES)) all: $(TARGET) $(TARGET): $(OBJ) src/main.c @$(CC) $(CFLAGS) $(OBJ) src/main.c -o $(TARGET) $(OBJ): $(OBJDIR)/%.o: src/%.c $(HEADERS) mkdir -p out $(CC) $(CFLAGS) -o $@ -c $< clean: rm -f $(TARGET) rm -f out/* rm -rf out/ rm -f $(TEST_FILES) $(TEST_LOGS) $(TEST_FILES): tests/%: tests/%.c $(TARGET) $(HEADERS) @$(CC) $(CFLAGS) -o $@ $< $(OBJ) $(TEST_LOGS): tests/%.log: tests/% @printf "Running %-40s%s " '`$<`' @result=$$(./$< 2>&1); \ ret=$$?; \ printf "Exit value: %s\n%s" "$$ret" "$$result" > $@; \ if test $$ret -eq 0 ; then \ printf "\e[0;32mPASS\e[0m\n";\ else\ printf "\e[0;31mFAIL\e[0m\n";\ fi check: test test: $(TEST_LOGS) .PHONY: clean all test check