V0_SRC := $(wildcard v0/src/*.c) // V0_TEST := $(filter-out v0/tests/test_buffer.c,$(wildcard v0/tests/*.c)) V0_SRC_OBJ := $(patsubst v0/%.c,v0/bin/%.o,$(V0_SRC)) V0_TEST_OBJ := $(patsubst v0/%.c,v0/bin/%.o,$(V0_TEST)) v0/bin/c2: $(V0_SRC_OBJ) $(CC) $(CFLAGS) -o $@ $^ V0_SRC_OBJ_NO_MAIN := $(filter-out v0/bin/src/main.o,$(V0_SRC_OBJ)) v0/bin/test: $(V0_SRC_OBJ_NO_MAIN) $(V0_TEST_OBJ) $(CC) $(CFLAGS) -o $@ $^ test:: v0/bin/test v0/bin/test # Build each .c file into a .o file, tracking header dependencies. v0/bin/%.o: v0/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -MMD -MP -c $< -o $@ -include $(V0_SRC_OBJ:.o=.d) -include $(V0_TEST_OBJ:.o=.d)