CC = gcc LD = $(CC) CFLAGS = -Wall -Wextra -Wno-unused-parameter -ggdb CPPFLAGS += -Iinclude LDFLAGS += ifndef DEBUG CFLAGS += -O2 CPPFLAGS += -DNDEBUG else CPPFLAGS += -DDEBUG endif BUILDDIR = build SOURCES = $(wildcard src/*.c) TEST_SOURCES = $(wildcard test/*.c) OBJECTS = $(addprefix $(BUILDDIR)/,$(SOURCES:.c=.o)) DEPS = $(addprefix $(BUILDDIR)/,$(SOURCES:.c=.d)) $(addprefix $(BUILDDIR)/,$(TEST_SOURCES:.c=.d)) LIB = liblilalloc TEST_BINS = $(patsubst test/%.c,$(BUILDDIR)/test/%,$(TEST_SOURCES)) .PHONY: all all: $(BUILDDIR)/$(LIB).a $(BUILDDIR)/%.o: %.c mkdir -p $(@D) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c -o $@ $< $(BUILDDIR)/$(LIB).a: $(OBJECTS) ar crs $@ $^ $(BUILDDIR)/test/%: test/%.c $(BUILDDIR)/$(LIB).a mkdir -p $(@D) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -o $@ $< $(BUILDDIR)/$(LIB).a .PHONY: test test: $(TEST_BINS) @set -e; \ for test_bin in $(TEST_BINS); do \ echo "Running $$test_bin:" ; \ ./$$test_bin; \ echo ; \ done .PHONY: clean clean: rm -rf $(BUILDDIR) ifeq (,$(findstring clean, $(MAKECMDGOALS))) -include $(DEPS) endif