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.
有谁看到我的错误?