最初の例ではMakefileが正しく動作していて、2番目の例ではまったく動作していません。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)
唯一の違いは/ objに設定FILES接頭辞であること、私はobjがソースファイルからファイル分離したかったので、私が使用するために必要なので、 $(substitute)関数を使用して、ルールの1つでディレクトリを変更します。 二Makefileは生成します。
make: *** No rule to make target 'obj/ft_putnbr.o', needed by 'put'. Stop.
誰もがここに私のミスを見ていますか? makefileで