-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
172 lines (149 loc) · 7.84 KB
/
Makefile
File metadata and controls
172 lines (149 loc) · 7.84 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: joolibar <joolibar@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/06/26 18:35:49 by joolibar #+# #+# #
# Updated: 2026/03/09 16:54:52 by joolibar ### ########.fr #
# #
# **************************************************************************** #
################################################################################
# CONFIG #
################################################################################
NAME = libft.a
NAME_BONUS = libft_bonus.a
INC_DIR = inc
SRC_DIR = src
SRC_BONUS_DIR = src_bonus
OBJ_DIR = obj
OBJ_BONUS_DIR = obj_bonus
################################################################################
# SOURCES #
################################################################################
SRC_FILES = \
ft_atoi ft_bzero ft_calloc ft_isalnum ft_isalpha ft_isascii ft_isdigit \
ft_isprint ft_memchr ft_memcmp ft_memcpy ft_memmove ft_memset ft_strchr \
ft_strdup ft_strlcat ft_strlcpy ft_strlen ft_strncmp ft_strnstr ft_strrchr \
ft_tolower ft_toupper \
ft_itoa ft_putchar_fd ft_putendl_fd ft_putnbr_fd ft_putstr_fd \
ft_split ft_striteri ft_strjoin ft_strmapi ft_strtrim ft_substr
SRC_BONUS_FILES = \
ft_lstadd_back_bonus ft_lstadd_front_bonus ft_lstclear_bonus \
ft_lstdelone_bonus ft_lstiter_bonus ft_lstlast_bonus \
ft_lstmap_bonus ft_lstnew_bonus ft_lstsize_bonus
SRCS = $(addprefix $(SRC_DIR)/, $(addsuffix .c, $(SRC_FILES)))
SRCS_BONUS = $(addprefix $(SRC_BONUS_DIR)/, $(addsuffix .c, $(SRC_BONUS_FILES)))
OBJS = $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
OBJS_BONUS = $(SRCS_BONUS:$(SRC_BONUS_DIR)/%.c=$(OBJ_BONUS_DIR)/%.o)
################################################################################
# COMPILATION #
################################################################################
CC = gcc
CFLAGS = -Wall -Wextra -Werror
INCLUDES = -I$(INC_DIR)
RM = rm -rf
MKD = mkdir -p
AR = ar -rcs
################################################################################
# COLORS #
################################################################################
DEF_COLOR = \033[0m
GRAY = \033[90m
WHITE = \033[97m
CYAN = \033[96m
BLUE = \033[94m
GREEN = \033[92m
PURPLE = \033[95m
PINK = \033[1;35m
ORANGE = \033[38;5;208m
RED = \033[1;31m
YELLOW = \033[1;33m
################################################################################
# BANNERS #
################################################################################
define BANNER
$(CYAN)
╭─────────────────────────────────────────╮
│ │
│ ██╗ ██╗██████╗ ███████╗████████╗ │
│ ██║ ██║██╔══██╗██╔════╝╚══██╔══╝ │
│ ██║ ██║██████╔╝█████╗ ██║ │
│ ██║ ██║██╔══██╗██╔══╝ ██║ │
│ ███████╗██║██████╔╝██║ ██║ │
│ ╚══════╝╚═╝╚═════╝ ╚═╝ ╚═╝ │
│ │
├─────────────────────────────────────────┤
│ $(WHITE)Standard C Library Functions$(CYAN) │
│ $(GRAY)made by joolibar • 42 School • 2024$(CYAN) │
╰─────────────────────────────────────────╯
$(DEF_COLOR)
endef
export BANNER
define BONUS_BANNER
$(PURPLE)
╭─────────────────────────────────────────╮
│ │
│ ██╗ ██╗██████╗ ███████╗████████╗ │
│ ██║ ██║██╔══██╗██╔════╝╚══██╔══╝ │
│ ██║ ██║██████╔╝█████╗ ██║ │
│ ██║ ██║██╔══██╗██╔══╝ ██║ │
│ ███████╗██║██████╔╝██║ ██║ │
│ ╚══════╝╚═╝╚═════╝ ╚═╝ ╚═╝ │
│ │
│ $(WHITE)● ● ● BONUS ● ● ●$(PURPLE) │
├─────────────────────────────────────────┤
│ $(WHITE)Linked List Operations$(PURPLE) │
│ $(GRAY)made by joolibar • 42 School • 2024$(PURPLE) │
╰─────────────────────────────────────────╯
$(DEF_COLOR)
endef
export BONUS_BANNER
################################################################################
# MAKEFILE RULES #
################################################################################
# Compile .c -> .o (Mandatory)
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c Makefile
@$(MKD) $(dir $@)
@printf "$(CYAN)\r › Compiling: $(WHITE)$<...\r$(DEF_COLOR)"
@$(CC) $(CFLAGS) -MMD -MP $(INCLUDES) -c $< -o $@
# Compile .c -> .o (Bonus)
$(OBJ_BONUS_DIR)/%.o : $(SRC_BONUS_DIR)/%.c Makefile
@$(MKD) $(dir $@)
@printf "$(PURPLE)\r › Compiling: $(WHITE)$<...\r$(DEF_COLOR)"
@$(CC) $(CFLAGS) -MMD -MP $(INCLUDES) -c $< -o $@
# Build Library - Mandatory
all : banner $(NAME)
banner:
@echo "$$BANNER"
$(NAME) : $(OBJS)
@$(AR) $(NAME) $(OBJS)
@echo "\n$(GREEN) ✓ Libft built successfully! $(GRAY)[$(NAME)]$(DEF_COLOR)"
# Build Library - Bonus
bonus : bonus_banner $(NAME_BONUS)
bonus_banner:
@echo "$$BONUS_BANNER"
$(NAME_BONUS) : $(OBJS) $(OBJS_BONUS)
@$(AR) $(NAME_BONUS) $(OBJS) $(OBJS_BONUS)
@echo "\n$(GREEN) ✓ Libft bonus built successfully! $(GRAY)[$(NAME_BONUS)]$(DEF_COLOR)"
# Clean Object Files
clean:
@$(RM) $(OBJ_DIR)
@$(RM) $(OBJ_BONUS_DIR)
@echo "$(YELLOW) ○ Object files cleaned$(DEF_COLOR)"
# Full Cleanup
fclean: clean
@$(RM) $(NAME)
@$(RM) $(NAME_BONUS)
@echo "$(RED) ✗ Libraries removed$(DEF_COLOR)"
# Rebuild Everything
re: fclean all
@echo "\n$(ORANGE) ↺ Rebuild complete$(DEF_COLOR)"
################################################################################
# PHONY TARGETS #
################################################################################
.PHONY: all bonus clean fclean re
# Include dependencies
-include $(OBJS:.o=.d)
-include $(OBJS_BONUS:.o=.d)