没有规则来制作目标 - Makefile

No rule to make target - Makefille

我需要一些帮助来理解为什么我的 makefile 没有选择将我的 .c 文件转换为 .o 的规则

NAME        = push_swap

INCLUDES    = -I includes -I $(LIBFT_DIR)/includes/

LIBFT_DIR   = libft/

CC          = gcc
CFLAGS      = -Wall -Wextra -Werror

DIR_SRCS    = srcs
DIR_OBJS    = objs

SRCS        = push_swap.c utils_1.c
OBJS        = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))



all:        $(NAME)

$(OBJF):
            @mkdir -p $(DIR_OBJS)

$(DIR_OBJS)/%.o :   $(DIR_SRCS)/%.c | $(OBJF)
            @$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

$(LIBFT):
            @make -C $(LIBFT_DIR)

$(NAME):    $(OBJS) $(LIBFT)
            @$(CC) $(CFLAGS) -o $(NAME) $(OBJS)

clean:
            rm -f $(OBJS)

fclean:     clean
            rm -f $(NAME)

re:         fclean all

.PHONY:     all clean fclean re bonus

我收到以下错误:

make: *** No rule to make target 'push_swap.o', needed by 'push_swap'. Stop.

这是我第一次将文件夹添加到我的 makefile 中,也许我在那里做错了什么。

谢谢。

编辑:

谢谢大家的帮助。

我最终改变了一些东西,因为我很难以其他方式做到这一点。

NAME        = push_swap

INCLUDES    = -I includes -I $(LIBFT_DIR)/includes/

LIBFT_DIR   = libft/

CC          = gcc
CFLAGS      = -Wall -Wextra -Werror

DIR_SRCS    = srcs/
DIR_OBJS    = objs/

SRCS_FILES  = push_swap utils_1

SRCS        = $(addprefix $(DIR_SRCS), $(addsuffix .c, $(SRCS_FILES)))
OBJS        = $(addprefix $(DIR_OBJS), $(addsuffix .o, $(SRCS_FILES)))

all:        $(NAME)

$(NAME):    $(OBJS) $(LIBFT)
            @$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LIBFT_DIR)libft.a

$(DIR_OBJS)%.o :    $(DIR_SRCS)%.c $(OBJF)
            @mkdir -p $(DIR_OBJS)
            @$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

$(LIBFT):
            @make -C $(LIBFT_DIR)

clean:
            rm -f $(OBJS)
            rm -r $(DIR_OBJS)

fclean:     clean
            rm -f $(NAME)

re:         fclean all

.PHONY:     all clean fclean re

这样就完美运行了。

有:

SRCS = push_swap.c utils_1.c

行:

OBJS        = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))

正在用 $(DIR_OBJS) (objs) 替换 $(DIR_SRCS) (srcs) 值,但是 SRC 值确实有 objs 里面是这样的:

OBJS        = push_swap.o utils_1.o

所以找不到规则。

尝试更改为:

SRCS = $(DIR_SRCS)/push_swap.c $(DIR_SRCS)/utils_1.c