1
0
mirror of https://git.disroot.org/80486DX2-66/polonium.git synced 2024-12-29 16:40:40 +05:30
polonium/Makefile

91 lines
1.7 KiB
Makefile

CC ?= gcc
DEBUG ?= 0
CFLAGS = -Wall -Werror -Wextra -Wpedantic -std=c99 -Ofast \
-D_POSIX_C_SOURCE=200809L
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_BASE = polonium
PROGNAME_SUFFIX_DEBUG = debug
EXECUTABLE = $(PROGNAME_BASE)
ifeq ($(DEBUG), 1)
EXECUTABLE := $(EXECUTABLE)_$(PROGNAME_SUFFIX_DEBUG)
endif
EXECPATH = $(BINDIR)/$(EXECUTABLE)
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 rmdirs
@for dir in $1; do \
if [ -d "$$dir" ]; then \
if [ -z "$$(find "$$dir" -mindepth 1 -maxdepth 1 -print -quit)" ]; \
then \
echo "Removing empty directory $$dir"; \
else \
echo "Removing non-empty directory $$dir"; \
fi; \
rm -r $$dir; \
fi; \
done
endef
define rmdirs_if_empty
@for dir in $1; do \
if [ -d "$$dir" ]; then \
if [ -z "$$(find "$$dir" -mindepth 1 -maxdepth 1 -print -quit)" ]; \
then \
echo "Removing empty directory $$dir"; \
rm -r $$dir; \
fi; \
fi; \
done
endef
FILES_TO_REMOVE = $(EXECPATH) $(DEP) $(OBJ)
DIRECTORIES_TO_REMOVE = $(BINDIR) $(OBJDIR)
clean:
$(call rmfiles_if_exist,$(FILES_TO_REMOVE))
$(call rmdirs_if_empty,$(DIRECTORIES_TO_REMOVE))
distclean:
$(call rmdirs,$(DIRECTORIES_TO_REMOVE))
.PHONY: all clean distclean