CC=gcc CFLAGS=-std=c17 -Wall -Werror -g TESTFW=criterion # Directories BIN=bin OBJ=obj SRC=src TEST=tests # Files OBJS=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(wildcard $(SRC)/*.c)) TESTBINS=$(patsubst $(TEST)/%.c, $(BIN)/%, $(wildcard $(TEST)/*.c)) all: test # Target Directories $(OBJ): mkdir $@ $(BIN): mkdir $@ # Target Files $(OBJ)/%.o: $(SRC)/%.c $(OBJ) $(CC) $(CFLAGS) -o $@ -c $< $(BIN)/%: $(BIN) $(TEST)/%.c $(OBJS) $(CC) $(CFLAGS) -o $@ -l $(TESTFW) $(filter-out $<,$^) # Actions .PHONY: test test: $(TESTBINS) for test in $(TESTBINS); do ./$$test --verbose; done .PHONY: clean clean: rm -r $(BIN) $(OBJ) .PHONY: info info: @printf "OBJS: %s\n" $(OBJS) @printf "TESTBINS: %s\n" $(TESTBINS)