我试图让这个makefile重新链接,而不是重新编译未修改的unessecarily文件。 “libft”是我的库,没有任何错误。在做
时我遇到的错误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 $@ -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 :(得分:0)
鉴于存在这些变量:
SRC_PATH = srcs/
SRC_POS = $(addprefix $(SRC_PATH),$(SRC))
我猜你的源文件实际上存在srcs/
,而你正在.
构建目标文件所以这个模式规则:
%.o: %.c
尝试匹配main.o
时,找不到main.c
,因为该文件确实是srcs/main.c
。由于该模式不匹配,因此不考虑规则本身,并且由于未找到其他规则,因此会出现错误。
相反,请尝试:
%.o : $(SRC_PATH)/%.c
$(CC) -o $@ -c $< $(FLAGS)