|
6 | 6 | # By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ # |
7 | 7 | # +#+#+#+#+#+ +#+ # |
8 | 8 | # Created: 2024/10/29 19:07:42 by sede-san #+# #+# # |
9 | | -# Updated: 2025/04/22 21:40:19 by sede-san ### ########.fr # |
| 9 | +# Updated: 2025/08/25 16:58:29 by sede-san ### ########.fr # |
10 | 10 | # # |
11 | 11 | # **************************************************************************** # |
12 | 12 |
|
13 | 13 | # ******************************* Output files ******************************* # |
14 | | -# Library name |
15 | | -NAME = ft_printf.a |
| 14 | + |
| 15 | +# Project name |
| 16 | +NAME = libftprintf.a |
16 | 17 |
|
17 | 18 | # ************************** Compilation variables *************************** # |
| 19 | + |
18 | 20 | # Compiler |
19 | 21 | CC = cc |
20 | 22 |
|
21 | 23 | # Compilation flags |
22 | | -CFLAGS = -Wall -Wextra -Werror |
| 24 | +CFLAGS = -Wall -Wextra -Werror -Wunreachable-code # -Ofast |
23 | 25 |
|
24 | | -# ****************************** Source files ******************************** # |
25 | | -SRC = \ |
26 | | -ft_printf.c |
| 26 | +# Additional headers |
| 27 | +HEADERS = -I $(INCLUDE_PATH) -I $(LIBFT_INCLUDE_PATH) |
| 28 | + |
| 29 | +# Debug flags, execute with DEBUG=1 -> make DEBUG=1 |
| 30 | +DFLAGS = -g3 |
| 31 | +ifeq ($(DEBUG), 1) |
| 32 | + CFLAGS += $(DFLAGS) |
| 33 | +endif |
27 | 34 |
|
28 | | -CHARACTER_STRING_PATH = character_string_types |
| 35 | +# Make command with no-print-directory flag |
| 36 | +MAKE += --no-print-directory |
29 | 37 |
|
30 | | -SRC += \ |
31 | | -$(CHARACTER_STRING_PATH)/ft_printf_putchar.c \ |
32 | | -$(CHARACTER_STRING_PATH)/ft_printf_putstr.c |
| 38 | +# ***************************** Style variables ****************************** # |
33 | 39 |
|
34 | | -INTEGER_PATH = integer_types |
| 40 | +# Define color codes |
| 41 | +RED = \033[0;31m |
| 42 | +GREEN = \033[0;32m |
| 43 | +YELLOW = \033[0;33m |
| 44 | +BLUE = \033[0;34m |
| 45 | +RESET = \033[0m # No Color |
35 | 46 |
|
36 | | -SRC += \ |
37 | | -$(INTEGER_PATH)/ft_printf_putint.c \ |
38 | | -$(INTEGER_PATH)/ft_printf_putuint.c |
| 47 | +# Emojis |
| 48 | +EMOJI_BROOM = 🧹 |
| 49 | +EMOJI_CHECK = ✅ |
| 50 | +EMOJI_CROSS = ❌ |
| 51 | +EMOJI_WRENCH = 🔧 |
| 52 | +EMOJI_BOX = 📦 |
39 | 53 |
|
40 | | -MEMDIR_PATH = memdir_types |
| 54 | +# ****************************** Source files ******************************** # |
| 55 | + |
| 56 | +# Source files path |
| 57 | +SRC_PATH = src |
| 58 | + |
| 59 | +# Source files |
| 60 | +SRC = \ |
| 61 | + $(SRC_PATH)/ft_printf.c \ |
| 62 | + $(SRC_PATH)/character_string_types/ft_printf_putchar.c \ |
| 63 | + $(SRC_PATH)/character_string_types/ft_printf_putstr.c \ |
| 64 | + $(SRC_PATH)/integer_types/ft_printf_putint.c \ |
| 65 | + $(SRC_PATH)/integer_types/ft_printf_putuint.c \ |
| 66 | + $(SRC_PATH)/memdir_types/ft_printf_putptr.c |
41 | 67 |
|
42 | | -SRC += \ |
43 | | -$(MEMDIR_PATH)/ft_printf_putptr.c |
| 68 | +# Include path |
| 69 | +INCLUDE_PATH = ./include |
44 | 70 |
|
45 | 71 | # ****************************** Object files ******************************** # |
46 | | -OBJ = $(SRC:.c=.o) |
47 | 72 |
|
48 | | -# Compile object files |
49 | | -%.o: %.c |
50 | | - $(CC) $(CFLAGS) -c $< -o $@ |
| 73 | +# Object files path |
| 74 | +OBJS_PATH = build |
| 75 | + |
| 76 | +# Source files and destination paths |
| 77 | +OBJS = $(SRC:$(SRC_PATH)/%.c=$(OBJS_PATH)/%.o) |
| 78 | + |
| 79 | +# Compile as object files |
| 80 | +$(OBJS_PATH)/%.o: $(SRC_PATH)/%.c |
| 81 | + @mkdir -p $(@D) |
| 82 | + @$(CC) $(CFLAGS) -c $< -o $@ $(HEADERS) |
| 83 | + @echo "$< compiled" |
51 | 84 |
|
52 | 85 | # ********************************* Rules ************************************ # |
| 86 | + |
53 | 87 | # Compile all |
54 | | -all: $(NAME) |
| 88 | +all: libft $(NAME) |
| 89 | +.PHONY: all |
55 | 90 |
|
56 | | -$(NAME): libft $(OBJ) |
57 | | - cp $(LIBFT) $(NAME) |
58 | | - ar rcs $(NAME) $(OBJ) |
59 | | - mv $(NAME) libftprintf.a |
| 91 | +# Compile project |
| 92 | +$(NAME): $(OBJS) |
| 93 | + @echo "$(YELLOW)$(EMOJI_BOX) Linking...$(RESET)" |
| 94 | + ar rcs $(NAME) $(OBJS) $(LIBFT_BIN) |
| 95 | + @echo "$(GREEN)$(EMOJI_CHECK) Linked.$(RESET)" |
60 | 96 |
|
61 | 97 | # Clean object files |
62 | 98 | clean: |
63 | | - $(MAKE) -C $(LIBFT_PATH) clean |
64 | | - rm -f $(OBJ) |
| 99 | + @echo "$(RED)$(EMOJI_BROOM) Cleaning object files...$(RESET)" |
| 100 | + @rm -rf $(OBJS_PATH) |
| 101 | + @echo "$(GREEN)$(EMOJI_CHECK) Object files cleaned.$(RESET)" |
| 102 | +.PHONY: clean |
65 | 103 |
|
66 | | -# Clean object files and library |
| 104 | +# Clean object files and binaries |
67 | 105 | fclean: clean |
68 | | - rm -rf $(LIB_PATH) |
69 | | - rm -f $(OBJ) |
70 | | - rm -f libftprintf.a |
| 106 | + @echo "$(RED)$(EMOJI_BROOM) Cleaning binaries...$(RESET)" |
| 107 | + @rm -f $(NAME) |
| 108 | + @if [ -d $(LIBFT_PATH) ]; then \ |
| 109 | + $(MAKE) -C $(LIBFT_PATH) fclean; \ |
| 110 | + fi |
| 111 | + @echo "$(GREEN)$(EMOJI_CHECK) Binaries cleaned.$(RESET)" |
| 112 | +.PHONY: fclean |
71 | 113 |
|
72 | 114 | # Recompile |
73 | 115 | re: fclean all |
| 116 | +.PHONY: re |
| 117 | + |
| 118 | +# ********************************* Libraries ******************************** # |
74 | 119 |
|
75 | | -# ****************************** Libraries ********************************** # |
| 120 | +# Compile libraries |
| 121 | +lib: |
| 122 | + @$(MAKE) libft |
| 123 | +.PHONY: lib |
76 | 124 |
|
| 125 | +# Compile file with libraries |
| 126 | +LIBS = $(LIBFT_BIN) |
| 127 | + |
| 128 | +# Libraries path |
77 | 129 | LIB_PATH = lib |
78 | 130 |
|
79 | | -LIBFT_PATH = $(LIB_PATH)/Libft |
| 131 | +# ** Libft ** # |
| 132 | + |
| 133 | +LIBFT = Libft |
| 134 | +LIBFT_REPO = https://github.com/sdevsantiago/Libft.git |
| 135 | +LIBFT_PATH = $(LIB_PATH)/$(LIBFT) |
| 136 | +LIBFT_INCLUDE_PATH = $(LIBFT_PATH) |
| 137 | +LIBFT_BIN = $(LIBFT_PATH)/libft.a |
80 | 138 |
|
81 | | -LIBFT = $(LIBFT_PATH)/libft.a |
| 139 | +libft: $(LIBFT_BIN) |
82 | 140 |
|
83 | | -libft: |
84 | | - if [ ! -d $(LIBFT_PATH) ]; then \ |
85 | | - git clone https://github.com/sdevsantiago/Libft.git $(LIBFT_PATH); \ |
86 | | - $(MAKE) -C $(LIBFT_PATH) all bonus; \ |
87 | | - elif [ ! -x $(LIBFT) ]; then \ |
88 | | - $(MAKE) -C $(LIBFT_PATH) re bonus; \ |
| 141 | +$(LIBFT_BIN): |
| 142 | + @if [ ! -d $(LIBFT_PATH) ]; then \ |
| 143 | + echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(LIBFT)...$(RESET)"; \ |
| 144 | + git clone $(LIBFT_REPO) $(LIBFT_PATH); \ |
| 145 | + rm -rf $(LIBFT_PATH)/.git; \ |
| 146 | + echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) cloned...$(RESET)"; \ |
| 147 | + fi |
| 148 | + @if [ ! -f $(LIBFT_BIN) ]; then \ |
| 149 | + echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(LIBFT)...$(RESET)"; \ |
| 150 | + $(MAKE) -C $(LIBFT_PATH) all clean; \ |
| 151 | + echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) compiled.$(RESET)"; \ |
89 | 152 | else \ |
90 | | - cd $(LIBFT_PATH); \ |
91 | | - git pull; \ |
92 | | - cd -; \ |
| 153 | + echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) already compiled.$(RESET)"; \ |
93 | 154 | fi |
94 | | - |
95 | | -# *********************************** Phony ********************************** # |
96 | | -.PHONY = all clean fclean re |
| 155 | +.PHONY: libft |
0 commit comments