93 lines
2.3 KiB
Makefile
93 lines
2.3 KiB
Makefile
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)
|