2016-11-21 5 views
0

Ich versuche, diese makefile Relink zu bekommen und nicht unlesbare Dateien neu zu kompilieren, die nicht geändert werden. Die "libft" ist meine Bibliothek und hat keine Fehler. Der Fehler, das ich habe, wennMakefile relink Fehler

make 

tun ist:

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

Mein Make-Datei ist:

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 [email protected] -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 

Jede Idee? Ich kann es nicht herausfinden, und ich denke, es ist, weil% .o.% C nicht

Antwort

0

Angesichts der Existenz dieser Variablen genannt wird:

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

Ich vermute, dass die Quelldateien tatsächlich leben in srcs/ während Sie bauen Ihre Objektdateien in . So dieser Musterregel:

%.o: %.c 

bei dem Versuch, main.o übereinstimmen wird, da diese Datei srcs/main.c wirklich kein main.c finden. Da dieses Muster nicht übereinstimmt, wird die Regel selbst nicht berücksichtigt, und da keine andere Regel gefunden wird, erhalten Sie einen Fehler.

Stattdessen versuchen:

%.o : $(SRC_PATH)/%.c 
    $(CC) -o [email protected] -c $< $(FLAGS) 
+0

@ Seluj78 Sie sind willkommen und SO willkommen zu! Siehe [Was tun, wenn jemand antwortet] (http://stackoverflow.com/help/someone-answers) – Barry