Erreur de reliure de Makefile

J’essaie d’obtenir cette recomposition de makefile et non de recomstackr inopinément des fichiers qui ne sont pas modifiés. Le “libft” est ma bibliothèque et ne contient aucune erreur. L’erreur que j’ai en faisant

make 

est :

 make: *** No rule to make target `main.o', needed by `ft_printf'. Stop. 

Mon makefile est:

 NAME = ft_printf SRC = main.c\ ft_printf.c\ parser_main.c\ utils.c\ debug_funcs.c OBJ = $(SRC:.c=.o) SRC_PATH = srcs/ SRC_POS = $(addprefix $(SRC_PATH),$(SRC)) INC = -I includes LIBFT = libft/libft.a CC = gcc FLAGS = -Wall -Wextra -Werror all: $(NAME) $(NAME): $(OBJ) $(CC) $(FLAGS) $(OBJ) -o $(NAME) $(LIBFT) %.o: %.c $(CC) -o $@ -c $< $(FLAGS) $(LIBFT): make -C ./libft/ clean: rm -f $(OBJ) make clean -C ./libft/ fclean: clean rm -f $(NAME) make fclean -C ./libft/ re: fclean all 

Une idée ? Je ne peux pas le comprendre et je pense que c’est parce que% .o:%. C n’est pas appelé

Compte tenu de l’existence de ces variables:

 SRC_PATH = srcs/ SRC_POS = $(addprefix $(SRC_PATH),$(SRC)) 

Je suppose que vos fichiers source résident réellement dans srcs/ alors que vous construisez vos fichiers object dans . Donc, cette règle de modèle:

 %.o: %.c 

en essayant de faire correspondre main.o ne trouvera pas un fichier main.c car ce fichier est vraiment srcs/main.c Comme ce modèle ne correspond pas, la règle elle-même n’est pas prise en compte et, comme aucune autre règle n’est trouvée, vous obtenez une erreur.

Au lieu de cela, essayez:

 %.o : $(SRC_PATH)/%.c $(CC) -o $@ -c $< $(FLAGS)