2016-11-21 130 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