TARGET := tracker BUILDDIR := build .DEFAULT_GOAL := all SRCDIRS := src SRCFILES := $(shell find $(SRCDIRS) -type f -name "*.c") OBJFILES := $(SRCFILES:%.c=$(BUILDDIR)/%.c.o) DEPFILES := $(SRCFILES:%.c=$(BUILDDIR)/%.c.d) CC := gcc CFLAGS := -Wall -Wextra CPPFLAGS := -I src $(shell pkg-config --cflags sdl2) LDLIBS := $(shell pkg-config --libs sdl2) .PHONY: $(TARGET) all clean all: $(TARGET) # PHONY RULES # ----------- $(TARGET): $(BUILDDIR)/$(TARGET) clean: echo CLEAN FILES FOR $(TARGET) rm -rf $(BUILDDIR) # SPECIFIC BUILD RULES # -------------------- $(BUILDDIR)/$(TARGET): $(OBJFILES) echo 'LD ' $@ mkdir -p $(@D) $(CC) $(LDFLAGS) -o $@ $(OBJFILES) $(LDLIBS) $(OBJFILES): $(BUILDDIR)/%.c.o: %.c echo 'CC ' $@ mkdir -p $(@D) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -o $@ -c $< # Header dependencies generated by -MMD. Keep this after the real targets so # included files can never accidentally become Make's default goal. -include $(DEPFILES)