2016-11-21 149 views
0

我想讓這個makefile重新鏈接,而不是重新編譯未修改的unessecarily文件。 「libft」是我的圖書館,並沒有任何錯誤。做Makefile重新鏈接錯誤

make 

當我遇到的錯誤是:

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

我的Makefile:

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 

任何想法?我不出來,我想這是因爲%的.o:%C不叫

回答

0

考慮到這些變量的存在:

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

我猜你的源文件實際上住在srcs/而你正在構建.所以這種模式規則對象文件:

%.o: %.c 

試圖匹配main.o不會發現,因爲該文件確實是一個srcs/main.cmain.c。由於該模式不匹配,規則本身不被考慮,並且由於沒有找到其他規則,所以會出現錯誤。

相反,嘗試:

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

@ Seluj78歡迎你,歡迎到SO!請參閱[有人回答時該怎麼辦](http://stackoverflow.com/help/someone-answers) – Barry