CC = gcc CFLAGS = -Wall -pg SRCDIR = src BUILDDIR = build TARGET = main SOURCES = $(wildcard $(SRCDIR)/**/*.c $(SRCDIR)/*.c) OBJECTS = $(patsubst $(SRCDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES)) ifeq ($(OS),Windows_NT) EXECUTABLE = $(BUILDDIR)/$(TARGET).exe RM = del /Q MKDIR = mkdir else EXECUTABLE = $(BUILDDIR)/$(TARGET) RM = rm -rf MKDIR = mkdir -p endif all: $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(CFLAGS) -o $@ $^ $(BUILDDIR)/%.o: $(SRCDIR)/%.c @$(MKDIR) -p $(@D) $(CC) $(CFLAGS) -c -o $@ $< clean: $(RM) $(BUILDDIR)/* .PHONY: clean