NAME = cub3d CPP = gcc LIBRARIES_DIR = Libft Minilibx LIBRARIES_A = Libft/libft.a Minilibx/libmlx.a SHARED = -lX11 -lXext -lm CPP_1 = $(CPP) -Wall -Wextra -Werror -I Libft -I Minilibx -I include $(FLAGS) $(FLAGS_1) CPP_2 = $(CPP) $(FLAGS) $(FLAGS_2) C_FILES = $(wildcard src/*.c) ifeq ($(BONUS), yes) C_FILES_REAL = $(filter-out $(wildcard src/*_nobonus.c),$(C_FILES)) else C_FILES_REAL = $(filter-out $(wildcard src/*_bonus.c),$(C_FILES)) endif O_FILES = $(patsubst %.c,%.o,$(C_FILES)) O_FILES_REAL = $(patsubst %.c,%.o,$(C_FILES_REAL)) ECHO = echoo(){ \ if [ -t 1 ]; then \ echo "$$*"; \ else \ echo "$$*" | sed -E "s/\x1B[[][0-9;]+m//g"; \ fi; \ };echoo _default : bonus all : $(NAME) bonus : $(MAKE) all BONUS=yes FLAGS_1="$(FLAGS_1) -DBONUS" debug : $(MAKE) all FLAGS_1="$(FLAGS_1) -g" debugre : $(MAKE) re FLAGS_1="$(FLAGS_1) -g" $(LIBRARIES_DIR): @$(ECHO) @$(ECHO) "\e[30;47;1m $(NAME): making library $@... \e[0m" $(MAKE) -C $@ clean : @$(ECHO) @$(ECHO) "\e[30;47;1m $(NAME): clean... \e[0m" -rm -f $(O_FILES) fclean : clean @$(ECHO) @$(ECHO) "\e[30;47;1m $(NAME): fclean... \e[0m" -rm -f $(NAME) -$(MAKE) -C Libft fclean -$(MAKE) -C Minilibx clean -rm $$(find Minilibx -name "Makefile.gen") re : clean all rebonus : clean bonus $(NAME) : $(O_FILES_REAL) $(LIBRARIES_DIR) @$(ECHO) @$(ECHO) "\e[30;47;1m $(NAME): linking... \e[0m" $(CPP_2) $(O_FILES_REAL) $(LIBRARIES_A) $(SHARED) -o $@ @$(ECHO) @$(ECHO) "\t\t \e[0;92m\(^o^)/ \e[0;102;30;1m $(NAME) made! \e[0;92m \(^o^)/\e[0m" @$(ECHO) %.o : %.c @$(ECHO) @$(ECHO) "\e[30;47;1m $(NAME): making '$@'... \e[0m" $(CPP_1) $(FLAGS_1) -c $< -o $@ check_headers : @ERROR=0; \ for HEADER in $(wildcard *.h) $(wildcard **/*.h); \ do \ echo "check header $$HEADER..."; \ > __tmp_check_header.c echo "#include \"$$HEADER\""; \ >> __tmp_check_header.c echo "#include \"$$HEADER\""; \ >> __tmp_check_header.c echo "int main() {}"; \ $(CPP_1) -o __tmp_check_header.out __tmp_check_header.c; \ if [ $$? -ne 0 ]; \ then \ ERROR=1; \ echo " error \e[31m:(\e[0m"; \ fi; \ echo " good \e[32m:)\e[0m"; \ 2> /dev/null rm -- "__tmp_check_header.out" "__tmp_check_header.c"; \ done; \ 2> /dev/null rm __tmp_check_header.out __tmp_check_header.c; \ if [ $$ERROR -eq 0 ]; then true; else false; fi; .PHONY : all clean fclean re check_headers $(LIBRARIES_DIR)