-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
128 lines (109 loc) · 4.17 KB
/
Copy pathMakefile
File metadata and controls
128 lines (109 loc) · 4.17 KB
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
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: nkojima <nkojima@student.42tokyo.jp> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2025/10/05 18:18:21 by nkojima #+# #+# #
# Updated: 2025/10/18 19:47:00 by nkojima ### ########.fr #
# #
# **************************************************************************** #
# ===============================
# Color #
# ===============================
GREEN = \033[0;32m
RED = \033[0;31m
YELLOW = \033[0;33m
RESET = \033[0m
# ===============================
# Settings #
# ===============================
NAME = fractol
CFLAGS = -Wall -Werror -Wextra -O2
# OS Detection
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
LDFLAGS = -L$(MLX_PATH) -lmlx -lXext -lX11 -lm
else ifeq ($(UNAME_S),Darwin)
LDFLAGS = -L$(MLX_PATH) -lmlx -L/opt/X11/lib -lXext -lX11 -framework OpenGL -framework AppKit
endif
# ===============================
# Directory Paths #
# ===============================
LIBS_DIR = libs
LIBFT_PATH = $(LIBS_DIR)/libft
MLX_PATH = $(LIBS_DIR)/minilibx
SRC_DIR = src
OBJ_DIR = obj
INCLUDE_DIR = include
# ===============================
# Source Files #
# ===============================
SRCS = main.c \
fractal.c \
render.c \
utils.c \
hooks.c \
parse.c \
window.c
OBJ_FILES = $(addprefix $(OBJ_DIR)/, $(SRCS:.c=.o))
# ===============================
# Libraries #
# ===============================
LIBFT = $(LIBFT_PATH)/libft.a
MLX = $(MLX_PATH)/libmlx.a
# ===============================
# Build Rules #
# ===============================
all: $(NAME)
$(NAME): $(OBJ_FILES) $(LIBFT) $(MLX)
@$(CC) $(CFLAGS) -o $@ $(OBJ_FILES) -L$(LIBFT_PATH) -lft $(LDFLAGS)
@echo "$(NAME): $(GREEN)object files were created $(RESET)"
@echo "$(NAME): $(YELLOW)$(NAME)$(RESET) $(GREEN)was created$(RESET)"
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(LIBFT) $(MLX)
@mkdir -p $(OBJ_DIR)
@$(CC) $(CFLAGS) -I$(INCLUDE_DIR) -I$(LIBFT_PATH) -I$(MLX_PATH) -c -o $@ $<
@echo "$(NAME): $(YELLOW)$@$(RESET) $(GREEN)was created$(RESET)"
# ===============================
# Library Dependencies #
# ===============================
$(LIBFT): | $(LIBFT_PATH)
@$(MAKE) -C $(LIBFT_PATH)
@echo "$(NAME): $(YELLOW)$(LIBFT)$(RESET) $(GREEN)was created$(RESET)"
$(LIBFT_PATH):
@git clone git@github.com:42nkojima/00-libft.git $(LIBFT_PATH)
@echo "$(NAME): $(YELLOW)$(LIBFT_PATH)$(RESET) $(GREEN)was cloned$(RESET)"
$(MLX): | $(MLX_PATH)
@$(MAKE) -C $(MLX_PATH)
@echo "$(NAME): $(YELLOW)$(MLX)$(RESET) $(GREEN)was created$(RESET)"
$(MLX_PATH):
@git clone https://github.com/42paris/minilibx-linux.git $(MLX_PATH)
@echo "$(NAME): $(YELLOW)$(MLX_PATH)$(RESET) $(GREEN)was cloned$(RESET)"
# ===============================
# Clean Rules #
# ===============================
clean:
@if [ -d $(LIBFT_PATH) ]; then $(MAKE) -C $(LIBFT_PATH) clean; fi
@if [ -d $(OBJ_DIR) ]; then \
rm -rf $(OBJ_DIR); \
echo "$(NAME): $(YELLOW)$(OBJ_DIR)$(RESET) $(RED)was deleted$(RESET)"; \
fi
fclean: clean
@if [ -d $(LIBFT_PATH) ]; then $(MAKE) -C $(LIBFT_PATH) fclean; fi
@if [ -f $(NAME) ]; then \
rm -f $(NAME); \
echo "$(NAME): $(YELLOW)$(NAME)$(RESET) $(RED)was deleted$(RESET)"; \
fi
# Include libraries in clean
distclean: fclean
@if [ -d $(MLX_PATH) ]; then \
rm -rf $(MLX_PATH); \
echo "$(NAME): $(YELLOW)$(MLX_PATH)$(RESET) $(RED)was deleted$(RESET)"; \
fi
@if [ -d $(LIBFT_PATH) ]; then \
rm -rf $(LIBFT_PATH); \
echo "$(NAME): $(YELLOW)$(LIBFT_PATH)$(RESET) $(RED)was deleted$(RESET)"; \
fi
re: fclean all
.PHONY: all clean fclean re distclean