CC := gcc CFLAGS := -Wall -Wextra -Wpedantic BIND := bin CSRCS = $(shell find * -type f -name '*.c') .PHONY: all clean all: $(CSRCS:%.c=$(BIND)/%) clean: rm -rf $(BIND) $(BIND)/c-templates: c-templates.c mkdir -p $(dir $@) gcc -E -CC $^ | gcc -E -CC -DDEFINE=\#define -xc - | gcc $(CFLAGS) --std=gnu99 -o $@ -xc - $(BIND)/%: %.c @echo $@ mkdir -p $(dir $@) $(CC) $(CFLAGS) $^ -o $@