Linux Makefile:没有生成目标的规则

Linux Makefile:没有生成目标的规则,linux,makefile,Linux,Makefile,我对Makefile有问题。仅当.c文件已被修改时,它才应将.c文件编译为对象文件。 但我在使用all规则时出错: make: *** No rule to make target `obj/main.o', needed by `ft_ls'. Stop. 当我手动使用时,它可以工作: clang -Wall -Wextra -Werror -Iinclude -o obj/main.o -c src/main.c 我的工作目录: Makefile include/*.h libft/

我对Makefile有问题。仅当.c文件已被修改时,它才应将.c文件编译为对象文件。 但我在使用
all
规则时出错:

make: *** No rule to make target `obj/main.o', needed by `ft_ls'.  Stop.
当我手动使用时,它可以工作:

clang -Wall -Wextra -Werror -Iinclude -o obj/main.o -c src/main.c
我的工作目录:

Makefile include/*.h  libft/libft.a    src/*.c
生成文件内容:

NAME = ft_ls
SRC_PATH = src
OBJ_PATH = obj
CPPFLAGS = -Iinclude
LDFLAGS = -Llibft
LDLIBS = -lft
CFLAGS = -Werror -Wall -Wextra
CC = clang
SRC_NAME = main.c\
     ft_type.c\
     ft_right.c\
     ft_putright.c\
     ft_date_converter.c
OBJ_NAME = $(SRC_NAME:.c=.o)
SRC = $(addprefix $(SRC_PATH)/,$(SRC_NAME))
OBJ = $(addprefix $(OBJ_PATH)/,$(OBJ_NAME))

all: $(NAME)

$(NAME): $(OBJ)
   $(CC) $(LDFLAGS) $(LDLIBS) $^ -o $@
   make -C libft

$(OBJ_PATH)%.o: $(SRC_PATH)%.c
   @mkdir $(OBJ_PATH) 2> /dev/null || true
   $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<

clean:
   rm -fv $(OBJ)
   make -C libft clean
   @rmdir $(OBJ_PATH) 2> /dev/null || true

fclean: clean
   rm -fv $(NAME)
   make -C libft fclean

re: fclean all

.PHONY: all, clean, fclean, re
NAME=ft\u ls
SRC_PATH=SRC
OBJ_路径=OBJ
CPPFLAGS=-Iinclude
LDFLAGS=-Llibft
LDLIBS=-lft
CFLAGS=-Werror-Wall-Wextra
CC=叮当声
SRC_NAME=main.c\
ft_类型c\
右上角\
ft_putright.c\
ft_date_converter.c
对象名称=$(SRC\u名称:.c=.o)
SRC=$(addprefix$(SRC\u路径)/,$(SRC\u名称))
OBJ=$(addprefix$(OBJ_路径)/,$(OBJ_名称))
全部:$(名称)
$(名称):$(OBJ)
$(CC)$(LDFLAGS)$(LDLIBS)$^-o$@
make-C libft
$(对象路径)%.o:$(SRC路径)%.c
@mkdir$(对象路径)2>/dev/null | | true
$(CC)$(CFLAGS)$(CPPFLAGS)-o$@-c$<
清洁:
rm-fv$(OBJ)
使-C libft干净
@rmdir$(对象路径)2>/dev/null | | true
清洁:清洁
rm-fv$(名称)
make-C libft fclean
回复:fclean all
.冒牌货:全部、干净、fclean、re
此依赖项行:

$(OBJ_PATH)%.o: $(SRC_PATH)%.c
用对象名连接
$(OBJ_PATH)
,但缺少
/
,应该是

$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c
否则它将扩展(例如:对于
main
)到:

此依赖项行:

$(OBJ_PATH)%.o: $(SRC_PATH)%.c
用对象名连接
$(OBJ_PATH)
,但缺少
/
,应该是

$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c
否则它将扩展(例如:对于
main
)到:

$(OBJ_路径)%.o:$(SRC_路径)%.c
=>
$(OBJ_路径)/%.o:$(SRC_路径)/%.c
$(OBJ_路径)%.o:$(SRC_路径)%.c
=
$(OBJ_路径)/%.o:$(SRC_路径)/.c