Makefile在第一個示例中正常工作並且絕對無法在第二個示例中工作,只是有點困惑。混淆Makefile規則
工作:
CC=gcc
CFLAGS=-Wall -Wextra -Werror
FILES=$(addprefix src/, ft_putnbr ft_putchar main)
OBJ=$(addsuffix .o, $(FILES))
NAME=put
$(NAME): $(OBJ)
$(CC) -o $(NAME) $(OBJ)
%.o: %.c
gcc -c $^ -o [email protected] $(CFLAGS) -I includes/
clean:
rm -f $(OBJ)
不工作:
CC=gcc
CFLAGS=-Wall -Wextra -Werror
FILES=$(addprefix obj/, ft_putnbr ft_putchar main)
OBJ=$(addsuffix .o, $(FILES))
NAME=put
$(NAME): $(OBJ)
$(CC) -o $(NAME) $(OBJ)
%.o: $(subst obj,src, %.c)
gcc -c $^ -o [email protected] $(CFLAGS) -I includes/
clean:
rm -f $(OBJ)
唯一的區別是FILES前綴設置爲OBJ /因爲我想分開OBJ從源文件文件,所以我需要使用$(替代)函數在其中一個規則中更改目錄。 第二Makefile中產生:
make: *** No rule to make target 'obj/ft_putnbr.o', needed by 'put'. Stop.
有誰看到我的錯誤?