From f92000241afc6726d215b1e4e7340701bf9564e4 Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 17 Sep 2025 18:12:04 +0200 Subject: [PATCH] build: starting from my new Makefile template --- Makefile | 144 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 105 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 564d4c0..40b8a6a 100644 --- a/Makefile +++ b/Makefile @@ -6,61 +6,127 @@ # By: rparodi +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/12 11:05:05 by rparodi #+# #+# # -# Updated: 2023/12/27 18:35:14 by raphael ### ########.fr # +# Updated: 2025/09/17 17:39:49 by rparodi ### ########.fr # # # # **************************************************************************** # -NAME=libftprintf.a -CC=clang -CFLAGS=-Wall -Wextra -Werror -RM=rm -f -LIBFT = ./libft/ft_strdup.c ./libft/ft_strlcpy.c ./libft/ft_strlen.c -SRC = ./src/ft_printf.c ./src/ft_put.c -OBJ = $(SRC:.c=.o) -OBJLibft = $(LIBFT:.c=.o) +# Variables +# Name +NAME = libftprintf.a + +# Commands +CC ?= clang +RM = rm -rf + +# Flags +CFLAGS = -Werror -Wextra -Wall + +INC_DIR = includes +CPPFLAGS = $(addprefix -I, $(INC_DIR)) -MMD -MP + + +# Objects +OBJDIRNAME = ./build +OBJ = $(addprefix $(OBJDIRNAME)/,$(SRC:.c=.o)) + +SRC = + +# Colors GREEN = \033[32m GREY = \033[0;90m RED = \033[0;31m GOLD = \033[38;5;220m END = \033[0m -all: header $(NAME) - @printf '\n$(GREY) Compilation $(GREEN)Done\n' +# Rules -header: - @printf '\n\n' - @printf '$(GOLD) ******* ***** ******* $(END)\n' - @printf '$(GOLD) ****** *** ******* $(END)\n' - @printf '$(GOLD) ******* ******* $(END)\n' - @printf '$(GOLD) ****** ******* $(END)\n' - @printf '$(GOLD) ******* ******* $(END)\n' - @printf '$(GOLD) ******************** ******* * $(END)\n' - @printf '$(GOLD) ******************** ******* *** $(END)\n' - @printf '$(GOLD) ******* ******* ****** $(END)\n' - @printf '$(GOLD) ******* $(END)\n' - @printf '$(GOLD) ******* $(END)\n\n' - @printf '$(GREY) Made by rparodi$(END)\n\n\n' +# All (make all) +all: header $(NAME) footer -$(NAME): $(OBJ) $(OBJLibft) - @printf '$(GREY) Compiling $(END)$(GOLD)$(NAME)$(END)\n' - @ar rc $(NAME) $(OBJ) $(OBJLibft) - @ranlib $(NAME) +lib: $(NAME) -%.o: %.c - @printf '$(GREY) Compiling $(END)$(GREEN)$<$(END)\n' - @$(CC) -I. -o $@ -c $? $(CFLAGS) - -dev: all bonus clean +# Bonus (make bonus) +bonus: header $(OBJ) $(LIB_OBJ) footer + @mkdir -p $(OBJDIRNAME) + @mkdir -p $(OBJDIRNAME)/$(SRCDIRNAME) + @printf '$(GREY) Be Carefull ur in $(END)$(GREEN)Debug Mode$(END)\n' + @$(CC) $(CFLAGS) $(CPPFLAGS) -D BONUS=1 -o $(NAME) $(OBJ) $(LIB_OBJ) +# Clean (make clean) clean: - @printf '$(GREY) Removing $(END)$(RED)Object$(END)\n' - @$(RM) $(OBJ) $(OBJLibft) + @printf '$(GREY) Removing $(END)$(RED)Objects$(END)\n' + @printf '$(GREY) Removing $(END)$(RED)Objects Folder$(END)\n' + @$(RM) $(OBJDIRNAME) +# Clean (make fclean) fclean: clean - @printf '$(GREY) Removing $(END)$(RED)Program$(END)\n' - @$(RM) $(NAME) + @printf '$(GREY) Removing $(END)$(RED)Program$(END)\n' + @$(RM) $(NAME) + @$(RM) ./.test/ + @echo "" -re: fclean all +# Restart (make re) +re: header fclean all -.PHONY: all bonus clean fclean re dev header +# Dependences for all +$(NAME): $(OBJ) + @mkdir -p $(OBJDIRNAME) + @ar rc $(NAME) $(OBJ) + @ranlib $(NAME) + +# Creating the objects +$(OBJDIRNAME)/%.o: %.c + @mkdir -p $(dir $@) + @printf '$(GREY) Compiling $(END)$(GREEN)$<$(END)\n' + @$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< + +# Header +header: + @clear + @printf '\n\n' + @printf '$(GOLD) ******* ****** ******* $(END)\n' + @printf '$(GOLD) ****** *** ******* $(END)\n' + @printf '$(GOLD) ******* * ******* $(END)\n' + @printf '$(GOLD) ****** ******* $(END)\n' + @printf '$(GOLD) ******* ******* $(END)\n' + @printf '$(GOLD) ******************* ******* * $(END)\n' + @printf '$(GOLD) ******************* ******* *** $(END)\n' + @printf '$(GOLD) ****** ******* ****** $(END)\n' + @printf '$(GOLD) ****** $(END)\n' + @printf '$(GOLD) ****** $(END)\n' + @printf '$(GREY) Made by rparodi$(END)\n\n' + +# Footer +footer: + @printf "\n" + @printf "$(GOLD) ,_ _,$(END)\n" + @printf "$(GOLD) | \\___//|$(END)\n" + @printf "$(GOLD) |=6 6=|$(END)\n" + @printf "$(GOLD) \\=._Y_.=/$(END)\n" + @printf "$(GOLD) ) \` ( ,$(END)\n" + @printf "$(GOLD) / \\ (('$(END)\n" + @printf "$(GOLD) | | ))$(END)\n" + @printf "$(GOLD) /| | | |\\_//$(END)\n" + @printf "$(GOLD) \\| |._.| |/-\`$(END)\n" + @printf "$(GOLD) '\"' '\"'$(END)\n" + @printf ' $(GREY)The compilation is$(END) $(GOLD)finished$(END)\n $(GREY)Have a good $(END)$(GOLD)correction !$(END)\n' + +clangd: + @printf "CompileFlags:\n" > ./.clangd + @printf " Add:\n" >> ./.clangd + @printf " - \"-xc\"\n" >> ./.clangd + @for FLAG in $(CXXFLAGS); do \ + printf " - \"$$FLAG\"\n" >> ./.clangd; \ + done + @printf " - \"-I"$(shell pwd)"/\"\n" >> .clangd; + @for file in $(INC_DIR); do \ + printf " - \"-I"$(shell pwd)"/"$$file"\"\n" >> .clangd; \ + done + @printf "\n" >> ./.clangd + @printf '$(GREY) Now parsing settings is set in $(END)$(GREEN)./.clangd$(END)\n' + +# Phony +.PHONY: all bonus clean fclean re footer header clangd + +-include ${OBJ:.o=.d}