为什么当make
代码中的命令抛出错误时make: *** No targets. Stop.
代码:
NAME := program
FLAG := -std=c11 -Wall -Wextra -Werror -Wpedantic
all: $(NAME)
$(NAME): *.c
clang $(FLAG) -o $(NAME) *.c -lm
clean:
rm -rf $(NAME)
reinstall: clean all
答案1
出现此错误的最可能原因是有一个空Makefile
(或makefile
)。
touch makefile
make
make: *** No targets. Stop.
请注意,如果您如上所示使用Makefile
,仍然有可能存在makefile
触发此错误的空值。删除您不使用的文件。
另请注意,您的操作行Makefile
必须缩进tab而不是空格:
$(NAME): *.c
clang $(FLAG) -o $(NAME) *.c -lm
如果你忘记了这一点,你会得到一个不同的错误。
完整性工作场景:
# Nothing in the current directory
ls
make
make: *** No targets specified and no makefile found. Stop.
# Create "Makefile" and list it
printf 'thing:\n\tdate >thing\n' >Makefile
cat Makefile
thing: date >thing
# Run the "Makefile" recipe
make
date >thing
# Create a bogus empty "makefile"
touch makefile
make
make: *** No targets. Stop.