-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
130 lines (109 loc) · 3.23 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# COLORS
NOC = \033[0m
BOLD = \033[1m
UNDERLINE = \033[4m
BLACK = \033[1;30m
RED = \033[1;31m
GREEN = \033[1;32m
YELLOW = \033[1;33m
BLUE = \033[1;34m
VIOLET = \033[1;35m
CYAN = \033[1;36m
WHITE = \033[1;37m
# SYMBOLS
INFO = $(WHITE)[$(BLUE)ℹ️$(WHITE)] $(NOC)
SUCCESS = $(WHITE)[$(GREEN)✅$(WHITE)] $(GREEN)
WARNING = $(WHITE)[$(YELLOW)⚠️$(WHITE)] $(YELLOW)
ERROR = $(WHITE)[$(RED)❌$(WHITE)] $(RED)
# Binary
NAME=fdf
# Path
SRC_PATH = ./srcs/
OBJ_PATH = ./objs/
INCDIR = includes
# Name
SRC_NAME = main.c \
parsing/parser.c \
parsing/checker.c \
controls/controls.c \
controls/zoom_control.c \
controls/rotation_control.c \
controls/movement_control.c \
graphics/render.c \
utils/string_utils.c \
utils/hexa_utils.c \
utils/convert.c \
utils/parsing_utils.c \
utils/map_utils.c \
../get_next_line/get_next_line.c \
../get_next_line/get_next_line_utils.c \
OBJ_NAME = $(SRC_NAME:.c=.o)
# Files
SRC = $(addprefix $(SRC_PATH)/,$(SRC_NAME))
OBJ = $(addprefix $(OBJ_PATH), $(OBJ_NAME))
# Libft
FT = ./libft/
FT_LIB = $(addprefix $(FT),libft.a)
FT_INC = -I ./libft
FT_LNK = -L ./libft -l ft
# MinilibX
MLX = ./mlx/
MLX_LIB = $(addprefix $(MLX),libmlx.a)
MLX_INC = -I ./mlx
MLX_LNK = -L ./mlx -l mlx -I /usr/X11/include -framework OpenGL -framework AppKit
# GLib
GLIB = ./glib/
GLIB_LIB = $(addprefix $(GLIB), libg.a)
GLIB_INC = -I ./glib/includes/
GLIB_LNK = -L ./glib -l g
# Flags
CC = gcc $(CFLAGS)
CFLAGS = -Wall -Wextra -Werror -ofast
all: obj $(FT_LIB) $(GLIB_LIB) $(MLX_LIB) $(NAME)
obj:
@echo "$(INFO)Creating objects folder... $(NOC)"
@mkdir -p $(OBJ_PATH)
@mkdir -p $(OBJ_PATH)/graphics
@mkdir -p $(OBJ_PATH)/controls
@mkdir -p $(OBJ_PATH)/parsing
@mkdir -p $(OBJ_PATH)/utils
@echo "$(SUCCESS)Objects folder created successfully$(NOC)"
$(OBJ_PATH)%.o:$(SRC_PATH)%.c
@$(CC) $(CFLAGS) $(MLX_INC) $(GLIB_INC) $(FT_INC) -I $(INCDIR) -o $@ -c $<
$(GLIB_LIB):
@echo "$(INFO)Building graphic library...$(NOC)"
@make -C $(GLIB)
@echo "$(SUCCESS)Graphic library built successfully!"
$(FT_LIB):
@echo "$(INFO)Building libft library...$(NOC)"
@make -C $(FT)
@echo "$(SUCCESS)Libft library built successfully!$(NOC)"
$(MLX_LIB):
@echo "$(INFO)Building minilibx library...$(NOC)"
@make -C $(MLX)
@echo "$(SUCCESS)Minilibx library built successfully!$(NOC)"
$(NAME): $(OBJ)
@echo "$(INFO)Building $(NAME)...$(NOC)"
@$(CC) $(OBJ) $(FT_LNK) $(GLIB_LNK) $(MLX_LNK) -o $@
@echo "$(SUCCESS)$(NAME) built successfully!$(NOC)"
clean:
@echo "$(INFO)Deleting .o files...$(NOC)"
@rm -rf $(OBJ_PATH)
@echo "$(SUCCESS).o files deleted successfully!$(NOC)"
@echo "$(INFO)Deleting libft files..."
@make -C $(FT) clean
@echo "$(SUCCESS)Libft files deleted successfully!$(NOC)"
@echo "$(INFO)Deleting graphic library files..."
@make -C $(GLIB) clean
@echo "$(SUCCESS)Graphic library files deleted successfully!"
@echo "$(INFO)Deleting minilibx files..."
@make -C $(MLX) clean
@echo "$(SUCCESS)Minilibx files deleted successfully!$(NOC)"
fclean: clean
@echo "$(INFO)Deleting $(NAME)...$(NOC)"
@rm -rf $(NAME)
@echo "$(SUCCESS)$(NAME) deleted successfully!$(NOC)"
@make -C $(FT) fclean
@make -C $(GLIB) fclean
re: fclean all
.PHONY: all clean fclean re