Files
huhuhu_config/config_files/skeleton_makefile

115 lines
3.0 KiB
Plaintext

# - - - - - - #
# #
# COLORS #
# #
# - - - - - - #
GRAY := "\e[0;30m"
RED := "\e[0;31m"
GREEN := "\e[0;32m"
YELLOW := "\e[0;33m"
BLUE := "\e[0;34m"
PURPLE := "\e[0;35m"
CYAN := "\e[0;36m"
WHITE := "\e[0;37m"
B_GRAY := "\e[1;30m"
B_RED := "\e[1;31m"
B_GREEN := "\e[1;32m"
B_YELLOW := "\e[1;33m"
B_BLUE := "\e[1;34m"
B_PURPLE := "\e[1;35m"
B_CYAN := "\e[1;36m"
B_WHITE := "\e[1;37m"
RESET := "\e[0m"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# . name = value \ . := no reevaluat when used #
# VARIABLES . value . != set result of command #
# . name is case sensitive . ?= set if not already set #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
NAME := a.out
#CC := c
#EXT := c
CC := c++
EXT := cpp
CFLAGS := -Wall -Wextra -Werror $(INCLUDES)
#CFLAGS += -std=c++98
CFLAGS += -g3
VPATH := $(D_SRCS)
LIBS :=
F_INCLUDES := $(HEADERS:%=$(D_HEADERS)/%) \
$(TEMPLATES:%=$(D_TEMPLATES)/%)
INCLUDES := -I$(D_HEADERS) \
-I$(D_TEMPLATES)
D_SRCS := ./srcs
SRCS := main.c
D_HEADERS := ./headers
HEADERS := colors.h \
tests.hpp
D_TEMPLATES := ./templates
TEMPLATES := template.tpp
D_OBJS := builds
OBJS := $(SRCS:%.$(EXT)=$(D_OBJS)/%.o)
ifeq "$(D_OBJS)" "."
RM_OBJS := rm -f $(OBJS)
else
RM_OBJS := rm -rf $(D_OBJS)
endif
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# . target: prerequisites . $@ : target #
# RULES . recipe . $< : 1st prerequisite #
# . recipe . $^ : all prerequisites #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
all: $(NAME)
# %.$(EXT) | $(D_OBJS) -> pipe is for order-only prerequisites :
# - for each file "%.$(EXT)" :
# - if it has been modified since last time
# - execute rules on corresponding target file "$(D_OBJS)/%.o"
# - and directory "$(D_OBJS)" is order-only prerequisite :
# - it must exist before executing rule
# - but last time modification is not checked
# - it avoids recompiling each time because the build folder was
# modified by creation of other objects files
$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS)
@echo $(CYAN)"compilation (objects.o) :"$(RESET)
$(CC) $(CFLAGS) -c $< -o $@
$(D_OBJS):
mkdir $@
$(OBJS): $(F_INCLUDES)
$(NAME): $(OBJS)
@echo $(CYAN)"linkage (link objects.o) :"$(RESET)
$(CC) $(OBJS) -o $@ $(LIBS)
leaks: $(NAME)
valgrind --leak-check=full --show-leak-kinds=all ./$(NAME)
clean:
$(RM_OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY : all clean fclean re