# Compiler and flags CC = gcc CFLAGS = -Wall -Ilib # Directories SRCDIR = src LIBDIR = lib BINDIR = bin OBJDIR = obj # Source files LIB_SOURCES = $(wildcard $(LIBDIR)/*.c) SRC_SOURCES = $(wildcard $(SRCDIR)/*.c) # Object files LIB_OBJECTS = $(LIB_SOURCES:$(LIBDIR)/%.c=$(OBJDIR)/%.o) # Executables EXECS = $(SRC_SOURCES:$(SRCDIR)/%.c=$(BINDIR)/%) # Create necessary directories $(shell mkdir -p $(OBJDIR)) $(shell mkdir -p $(BINDIR)) # Rules all: $(EXECS) $(BINDIR)/%: $(SRCDIR)/%.c $(LIB_OBJECTS) $(CC) $(CFLAGS) -o $@ $< $(LIB_OBJECTS) $(OBJDIR)/%.o: $(LIBDIR)/%.c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(OBJDIR)/*.o rm -f $(BINDIR)/* .PHONY: all clean