CC = gcc CFLAGS = -Wall -g SRCDIR = src BUILDDIR = build TARGET = main SOURCES = $(wildcard $(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 -f MKDIR = mkdir -p endif all: $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(CFLAGS) -o $@ $^ $(BUILDDIR)/%.o: $(SRCDIR)/%.c $(MKDIR) $(BUILDDIR) $(CC) $(CFLAGS) -c -o $@ $< clean: $(RM) $(BUILDDIR)/* .PHONY: clean