"make clean" 的结果是 "没有规则可以制作目标 'clean'"。

28

我正在运行Ubuntu 10.04。每当我运行make clean时,都会得到以下错误:

  

make:*** 没有清除目标‘clean’。停止。

这是我的Makefile:

CC = gcc
CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall
PROGRAMS = digitreversal
all : $(PROGRAMS)
digitreversal : digitreversal.o
       $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
.PHONY: clean
clean:
       @rm -f $(PROGRAMS) *.o core
任何想法为什么它不起作用?
编辑:似乎这样做:
make -f Makefile.txt clean

现在可以正常工作。那么,有没有设置可以更改,使我不必每次都使用 -f Makefile.txt 呢?


5
请确保您正在使用正确的Makefile。可能会出现上面命名为Makefile,而您还有一个没有clean目标的makefile,当您调用make clean时,默认情况下使用makefile而不是Makefile - codaddict
4
将你的 Makefile.txt 重命名为 Makefile,在名称中不要包含扩展名。 - Jens Gustedt
2
我在我的Mac上遇到了同样的问题。由于某种原因,MakeFile文件没有被make命令找到。将其重命名为makefile解决了这个问题。虽然这很荒谬! - Foad S. Farimani
5个回答

27

看起来您的makefile文件名不是'Makefile'或'makefile'。如果它的文件名是不同的,比如说'abc',请尝试运行'make -f abc clean'。


7

我想你现在已经明白了。 答案就隐藏在你的第一封邮件中。

make命令默认查找makefileMakefileGNUMakefile作为输入文件,而你的文件夹中有一个Makefile.txt文件。只需删除文件扩展名(.txt)即可正常工作。


2
检查文件名是否为GNUMakefile、makefile或Makefile。
如果文件名不是这些(而且您不想重命名它),则尝试:
make -f othermakefilename clean

1

您遇到了Makefile中最常见的错误之一。每个命令开头都需要放置一个制表符Tab。在$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)@rm -f $(PROGRAMS) *.o core这两行前,您放置了空格。如果您使用Tab代替它们,问题就会解决。

然而,这个错误并不会导致"没有找到规则来制作目标..."的错误。这可能意味着你的问题不止于Makefile。您确定这是正确的Makefile吗?尝试显式地将其作为参数传递给make,make -f Makefile,并告诉我们发生了什么。


8
如果缩进不正确,你将收到missing separator错误而不是No rule to make target错误。请注意保持缩进的正确性。 - codaddict
你说得对,正如我所澄清的那样,这并不是Makefile本身的问题。 - Michael Foukarakis

1

这对我有效。你确定你是用制表符缩进的吗?

CC = gcc
CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall
PROGRAMS = digitreversal
all : $(PROGRAMS)
digitreversal : digitreversal.o
    [tab]$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

.PHONY: clean
clean:
    [tab]@rm -f $(PROGRAMS) *.o core

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接