-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile_OSX
109 lines (87 loc) · 2.43 KB
/
Makefile_OSX
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
# 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 = $(BLUE)ℹ️ $(NOC)
SUCCESS = $(GREEN)✅ $(GREEN)
WARNING = $(YELLOW)⚠️ $(YELLOW)
ERROR = $(RED)❌ $(RED)
# Binary
NAME=cub3D
# Leaks cmd
LEAKS_CMD = valgrind --leak-check=yes
# Paths
SRC_PATH = ./srcs/
OBJ_PATH = ./objs/
INCDIR = includes
# Sources
SRC_NAME = main.c \
# Objects
OBJ_NAME = $(SRC_NAME:.c=.o)
# Files paths
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
# 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)/parsing
@mkdir -p $(OBJ_PATH)/utils
@echo "$(SUCCESS)Objects folder created successfully$(NOC)"
$(OBJ_PATH)%.o:$(SRC_PATH)%.c
@$(CC) $(CFLAGS) $(MLX_INC) $(FT_INC) -I $(INCDIR) -o $@ -c $<
$(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) $(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 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
re: fclean all
leaks: $(NAME)
$(LEAKS_CMD) ./$(NAME)
run: $(NAME)
@./$(NAME)
.PHONY: all clean fclean re leaks run