change: improve Makefile

This commit is contained in:
mcolonna 2024-04-23 00:07:40 +02:00
parent 42706ab8cc
commit 347f34086d

View file

@ -1,4 +1,4 @@
# The interesting part ##### THE INTERESTING PART #####
NAME = so_long NAME = so_long
SRCS = src/ SRCS = src/
INCLUDES = includes/ INCLUDES = includes/
@ -22,46 +22,55 @@ LIBRARIES = mlx libtf
LIBRARIES_FILES = libtf/libtf.a LIBRARIES_FILES = libtf/libtf.a
LIBRARIES_LINK = mlx LIBRARIES_LINK = mlx
LINK = Xext X11 m z LINK = Xext X11 m z
MORE_FLAGS +=
##### END OF THE INTERESTING PART #####
# It works and I probably won't change it for the rest of my life
C_FILES = $(addsuffix .c,$(addprefix $(SRCS),$(CODE))) C_FILES = $(addsuffix .c,$(addprefix $(SRCS),$(CODE)))
O_FILES = $(addsuffix .o,$(addprefix $(SRCS),$(CODE))) O_FILES = $(addsuffix .o,$(addprefix $(SRCS),$(CODE)))
ifdef DEBUG ifdef DEBUG
CC = cc -Wall -Wextra -Werror -g CC = cc -Wall -Wextra -Werror -g $(MORE_FLAGS)
else else
CC = cc -Wall -Wextra -Werror CC = cc -Wall -Wextra -Werror $(MORE_FLAGS)
endif endif
##### PUBLIC RULES #####
all : $(NAME) all : $(NAME)
@echo "\t\t \e[0;92m\(^o^)/ \e[0;102;30;1m $(NAME) made! \e[0;92m \(^o^)/\e[0m"
$(NAME) : $(O_FILES) $(LIBRARIES)
$(CC) -o $(NAME) $(O_FILES) $(addprefix -L ,$(LIBRARIES_LINK)) $(addprefix -l ,$(LIBRARIES_LINK) $(LINK)) $(LIBRARIES_FILES)
@echo "\t\t \e[0;92m\(^o^)/ \e[0;102;30;1m $(NAME) compiled! \e[0;92m \(^o^)/\e[0m"
$(LIBRARIES) :
ifdef DEBUG
make -C $@ debug || make -C $@
else
make -C $@
endif
@echo "\e[30;47;1m library $@ made! \e[0m"
%.o : %.c
$(CC) $(addprefix -I ,$(INCLUDES) $(LIBRARIES)) -c $< -o $@
clean : clean :
@echo "\e[30;47;1m $(NAME): removing *.o files... \e[0m"
-rm -f $(O_FILES) -rm -f $(O_FILES)
@echo "\e[30;47;1m clean finished! \e[0m" @echo "\e[30;47;1m $(NAME): removing *.o files finished! \e[0m"
fclean : clean fclean : clean
@echo "\e[30;47;1m $(NAME): fclean... \e[0m"
$(foreach lib,$(LIBRARIES), make fclean -C $(lib) || make clean -C $(lib); ) $(foreach lib,$(LIBRARIES), make fclean -C $(lib) || make clean -C $(lib); )
-rm -f $(NAME) -rm -f $(NAME)
@echo "\e[30;47;1m fclean finished! \e[0m" @echo "\e[30;47;1m $(NAME): fclean finished! \e[0m"
re : clean all re : clean all
debug : debug :
make all DEBUG=yes make all DEBUG=yes
$(NAME) : $(O_FILES) $(LIBRARIES)
@echo "\e[30;47;1m $(NAME): linking... \e[0m"
$(CC) -o $(NAME) $(O_FILES) $(addprefix -L ,$(LIBRARIES_LINK)) $(addprefix -l ,$(LIBRARIES_LINK) $(LINK)) $(LIBRARIES_FILES)
@echo "\e[30;47;1m $(NAME): linked! \e[0m"
$(LIBRARIES) :
@echo "\e[30;47;1m $(NAME): making library $@... \e[0m"
ifdef DEBUG
make -C $@ debug || make -C $@
else
make -C $@
endif
@echo "\e[30;47;1m $(NAME): library $@ made! \e[0m"
%.o : %.c
$(CC) $(addprefix -I ,$(INCLUDES) $(LIBRARIES)) -c $< -o $@
.PHONY : all debug clean fclean re $(LIBRARIES) .PHONY : all debug clean fclean re $(LIBRARIES)