CC ?= gcc DEBUG ?= 0 CFLAGS = -Wall -Werror -Wextra -Wpedantic -std=c99 -Ofast ifeq ($(DEBUG), 1) CFLAGS += -g -DDEBUG endif SRCDIR = ./src INCDIR = ./include OBJDIR = ./obj BINDIR = ./bin SRC = $(wildcard $(SRCDIR)/*.c) OBJ = $(SRC:$(SRCDIR)/%.c=$(OBJDIR)/%.o) DEP = $(OBJ:.o=.d) PROGNAME_RELEASE = polonium PROGNAME_DEBUG = polonium_debug ifeq ($(DEBUG), 1) EXECUTABLE = $(PROGNAME_DEBUG) else EXECUTABLE = $(PROGNAME_RELEASE) endif EXECPATH = $(BINDIR)/$(EXECUTABLE) EXECPATH_RELEASE = $(BINDIR)/$(PROGNAME_RELEASE) EXECPATH_DEBUG = $(BINDIR)/$(PROGNAME_DEBUG) all: $(EXECPATH) $(EXECPATH): $(OBJ) @mkdir -p $(@D) $(CC) $(CFLAGS) $^ -o $@ ifeq ($(DEBUG), 0) strip $@* endif -include $(DEP) $(OBJDIR)/%.o: $(SRCDIR)/%.c @mkdir -p $(@D) $(CC) $(CFLAGS) -I$(INCDIR) -MMD -MP -c $< -o $@ define rmfiles_if_exist @for file in $1; do \ if [ -e $$file ]; then \ echo "Removing file $$file"; \ rm $$file; \ fi; \ done endef define rmdir_if_empty @if [ -d "$1" ]; then \ if [ -z "$$(find "$1" -mindepth 1 -maxdepth 1 -print -quit)" ]; then \ echo "Removing empty directory $1"; \ rm -r $1; \ fi; \ fi endef clean: $(call rmfiles_if_exist,$(EXECPATH_RELEASE) $(EXECPATH_DEBUG) $(DEP) $(OBJ)) $(call rmdir_if_empty,$(BINDIR)) $(call rmdir_if_empty,$(OBJDIR)) .PHONY: all clean