簡體   English   中英

Makefile:無規則可作為目標

[英]Makefile : No rule to make target

我的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

Makefile內容:

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

此依賴項行:

$(OBJ_PATH)%.o: $(SRC_PATH)%.c

$(OBJ_PATH)與對象名連接起來,但是應該有一個/缺失

$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c

否則它將擴展(例如: main )到:

objmain.o : srcmain.c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM