【问题标题】:Makefile relink errorMakefile重新链接错误
【发布时间】:2016-11-21 14:06:09
【问题描述】:

我试图让这个 makefile 重新链接,而不是重新编译未修改的不必要的文件。 “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 没有被调用

【问题讨论】:

    标签: c makefile


    【解决方案1】:

    鉴于这些变量的存在:

    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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多