Skip to content

Commit 23c38cf

Browse files
committed
update: Makefile can now be invoked with LIBFT_PATH indicating another copy of Libft to prevent double copy
1 parent 7ba3644 commit 23c38cf

1 file changed

Lines changed: 34 additions & 65 deletions

File tree

Makefile

Lines changed: 34 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,151 +6,120 @@
66
# By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ #
77
# +#+#+#+#+#+ +#+ #
88
# Created: 2024/10/29 19:07:42 by sede-san #+# #+# #
9-
# Updated: 2025/08/26 00:27:39 by sede-san ### ########.fr #
9+
# Updated: 2025/08/29 16:58:10 by sede-san ### ########.fr #
1010
# #
1111
# **************************************************************************** #
1212

1313
# ******************************* Output files ******************************* #
1414

15-
# Project name
1615
NAME = libftprintf.a
1716

1817
# ************************** Compilation variables *************************** #
1918

20-
# Compiler
21-
CC = cc
19+
CC = cc
20+
CFLAGS = -Wall -Wextra -Werror -Wunreachable-code
21+
HEADERS = -I $(INCLUDE_PATH) -I $(LIBFT_INCLUDE_PATH)
2222

23-
# Compilation flags
24-
CFLAGS = -Wall -Wextra -Werror -Wunreachable-code # -Ofast
25-
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
3123
ifeq ($(DEBUG), 1)
32-
CFLAGS += $(DFLAGS)
24+
CFLAGS += -g3
3325
endif
3426

35-
# Make command with no-print-directory flag
3627
MAKE += --no-print-directory
3728

38-
# ***************************** Style variables ****************************** #
39-
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
46-
47-
# Emojis
48-
EMOJI_BROOM = 🧹
49-
EMOJI_CHECK = ✅
50-
EMOJI_CROSS = ❌
51-
EMOJI_WRENCH = 🔧
52-
EMOJI_BOX = 📦
53-
5429
# ****************************** Source files ******************************** #
5530

56-
# Source files path
5731
SRC_PATH = src
5832

59-
# Source files
60-
SRC = \
33+
SRC = \
6134
$(SRC_PATH)/ft_printf.c \
6235
$(SRC_PATH)/character_string_types/ft_printf_putchar.c \
6336
$(SRC_PATH)/character_string_types/ft_printf_putstr.c \
6437
$(SRC_PATH)/integer_types/ft_printf_putint.c \
6538
$(SRC_PATH)/integer_types/ft_printf_putuint.c \
6639
$(SRC_PATH)/memdir_types/ft_printf_putptr.c
6740

68-
# Include path
69-
INCLUDE_PATH = ./include
41+
INCLUDE_PATH = include
7042

7143
# ****************************** Object files ******************************** #
7244

73-
# Object files path
7445
OBJS_PATH = build
7546

76-
# Source files and destination paths
7747
OBJS = $(SRC:$(SRC_PATH)/%.c=$(OBJS_PATH)/%.o)
7848

79-
# Compile as object files
8049
$(OBJS_PATH)/%.o: $(SRC_PATH)/%.c
8150
@mkdir -p $(@D)
8251
@$(CC) $(CFLAGS) -c $< -o $@ $(HEADERS)
8352
@echo "$< compiled"
8453

8554
# ********************************* Rules ************************************ #
8655

87-
# Compile all
8856
all: libft $(NAME)
8957
.PHONY: all
9058

91-
# Compile project
9259
$(NAME): $(OBJS)
9360
@echo "$(YELLOW)$(EMOJI_BOX) Linking...$(RESET)"
9461
@cp $(LIBFT_BIN) $(NAME)
9562
ar rcs $(NAME) $(OBJS)
9663
@echo "$(GREEN)$(EMOJI_CHECK) Linked.$(RESET)"
9764

98-
# Clean object files
9965
clean:
10066
@echo "$(RED)$(EMOJI_BROOM) Cleaning object files...$(RESET)"
10167
@rm -rf $(OBJS_PATH)
10268
@echo "$(GREEN)$(EMOJI_CHECK) Object files cleaned.$(RESET)"
10369
.PHONY: clean
10470

105-
# Clean object files and binaries
10671
fclean: clean
10772
@echo "$(RED)$(EMOJI_BROOM) Cleaning binaries...$(RESET)"
10873
@rm -f $(NAME)
109-
@if [ -d $(LIBFT_PATH) ]; then \
110-
$(MAKE) -C $(LIBFT_PATH) fclean; \
74+
@if [ -d $(LIBFT_PATH) ]; then \
75+
$(MAKE) --silent -C $(LIBFT_PATH) fclean; \
11176
fi
11277
@echo "$(GREEN)$(EMOJI_CHECK) Binaries cleaned.$(RESET)"
11378
.PHONY: fclean
11479

115-
# Recompile
11680
re: fclean all
11781
.PHONY: re
11882

11983
# ********************************* Libraries ******************************** #
12084

121-
# Compile libraries
122-
lib:
123-
@$(MAKE) libft
124-
.PHONY: lib
125-
126-
# Compile file with libraries
127-
LIBS = $(LIBFT_BIN)
128-
129-
# Libraries path
13085
LIB_PATH = lib
13186

13287
# ** Libft ** #
13388

13489
LIBFT = Libft
13590
LIBFT_REPO = https://github.com/sdevsantiago/Libft.git
136-
LIBFT_PATH = $(LIB_PATH)/$(LIBFT)
91+
ifndef LIBFT_PATH
92+
LIBFT_PATH = $(LIB_PATH)/$(LIBFT)
93+
endif
13794
LIBFT_INCLUDE_PATH = $(LIBFT_PATH)
13895
LIBFT_BIN = $(LIBFT_PATH)/libft.a
13996

14097
libft: $(LIBFT_BIN)
98+
.PHONY: libft
14199

142100
$(LIBFT_BIN):
143101
@if [ ! -d $(LIBFT_PATH) ]; then \
144-
echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(LIBFT)...$(RESET)"; \
145-
git clone $(LIBFT_REPO) $(LIBFT_PATH); \
146-
rm -rf $(LIBFT_PATH)/.git; \
147-
echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) cloned...$(RESET)"; \
102+
echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(LIBFT)...$(RESET)"; \
103+
git clone --quiet $(LIBFT_REPO) $(LIBFT_PATH); \
104+
rm -rf $(LIBFT_PATH)/.git; \
105+
echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) cloned...$(RESET)"; \
148106
fi
149107
@if [ ! -f $(LIBFT_BIN) ]; then \
150-
echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(LIBFT)...$(RESET)"; \
151-
$(MAKE) -C $(LIBFT_PATH) all clean; \
152-
echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) compiled.$(RESET)"; \
153-
else \
154-
echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) already compiled.$(RESET)"; \
108+
echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(LIBFT)...$(RESET)"; \
109+
$(MAKE) --silent -C $(LIBFT_PATH) all clean; \
110+
echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) compiled.$(RESET)"; \
155111
fi
156-
.PHONY: libft
112+
113+
# ***************************** Style variables ****************************** #
114+
115+
RED = \033[0;31m
116+
GREEN = \033[0;32m
117+
YELLOW = \033[0;33m
118+
BLUE = \033[0;34m
119+
RESET = \033[0m
120+
121+
EMOJI_BROOM = 🧹
122+
EMOJI_CHECK = ✅
123+
EMOJI_CROSS = ❌
124+
EMOJI_WRENCH = 🔧
125+
EMOJI_BOX = 📦

0 commit comments

Comments
 (0)