“make clean”导致“没有规则使目标‘clean’”

问题描述 投票:0回答:6

我运行的是 Ubuntu 10.04。每当我运行

make clean
时,我都会得到:

make: *** 没有规则可以使目标“干净”。停下来。

这是我的 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

c build makefile
6个回答
27
投票

你的 makefile 的名称似乎不是“Makefile”或“makefile”。如果不同,请说“abc”,尝试运行“make -f abc clean”


7
投票

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

默认情况下,

make
命令会查找
makefile
Makefile
GNUMakefile
作为输入文件,并且您的文件夹中有
Makefile.txt
。只需删除文件扩展名 (
.txt
) 就可以了。


2
投票

检查该文件是否名为 GNUMakefile、makefile 或 Makefile。

如果它被称为其他名称(并且您不想重命名它),请尝试:

make -f othermakefilename clean


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

1
投票

您已经成为 Makefile 中最常见错误的受害者。您始终需要在每个命令的开头放置一个制表符。您已在

$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
@rm -f $(PROGRAMS) *.o core
行之前添加了空格。如果你用 Tab 替换它们,那就没问题了。

但是,此错误不会导致“没有规则来创建目标...”错误。这可能意味着您的问题超出了您的 Makefile 范围。您是否检查过这是正确的 Makefile,就像您想要指定命令的 Makefile 一样?尝试显式地将其作为参数传递给 make,

make -f Makefile
,并让我们知道会发生什么。


0
投票

也许有一天这会对某些人有所帮助。

我在 MacO 上制作了

Makefile
并将其复制到 Linux(mint 操作系统)。由于某种原因,这不太好(不知道为什么)。只需用
Makefile
打开
vim
,然后保存并退出。之后它应该开始正常工作

© www.soinside.com 2019 - 2024. All rights reserved.