CFLAGS ?= -Wall -Wextra -Iinclude HFILES := $(shell find include -type f -name '*.h') CFILES := $(shell find src -type f -name '*.c') OFILES := $(CFILES:%.c=%.o) TESTFILES := $(shell find test -type f -name '*.c' -not -name runner.c) TESTS := $(TESTFILES:%.c=%) .PHONY: clean test psxc: $(OFILES) $(CC) $(OFILES) -o $@ test/%: test/%.c $(HFILES) $(OFILES) $(CC) -Wno-unused-parameter $(CFLAGS) $(filter-out src/main.o, $(OFILES)) test/runner.c $< -o $@ %.o: %.c $(HFILES) $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(OFILES) $(TESTS) psxc test: $(TESTS) @for TEST in $(TESTS); do \ ./$$TEST; \ done