Makefile产生错误"No rule to make target"

6
我尝试使用其他两个最相关的主题来解决这个问题: Makefile error: No rule to make target Makefile: No rule to make target. Stop 但是,似乎都没有解决我的问题。
我不确定我的代码哪里出错了,因为我的教练确认了他那边的代码是可以工作的。
我的makefile代码如下:
TARGET  = demo
FILES   = test.c
OBJS    = $(FILES:.c=.o)
ASMS    = $(FILES:.c=.s)

all:    $(TARGET)

$(TARGET):  $(OBJS)
    gcc -o $@ $^

%.o:    %.c
    gcc -c $< -o $@

%.s:    %.c
    gcc -S -masm=intel $< -o $@

asm:    $(ASMS)

run:    $(TARGET)
    ./$(TARGET)

clean:
    rm -f $(TARGET) $(OBJS) $(ASMS)

然而,当我尝试执行“make run”时,会产生以下结果。
make: *** No rule to make target 'run'. Stop.

如图所示图像

我尝试编译的程序实际上只有4行代码,我不认为这是问题的原因。

#include <stdio.h>
char *msg = "Exam Lab 1";

int main(int argc, char *argv[]) {
    printf("%s\n", msg);
}

这是我运行make的目录内容:

http://i.imgur.com/r5EnwHj.png


请确保每个配方的缩进行只使用制表符而不是空格。 - dbush
谢谢你的提醒。完全忘记了makefile依赖于制表符,然而我仍然遇到了问题。http://i.imgur.com/wioJc37.png - Cashews
你正在运行 make 命令的目录中包含哪些内容?应该有名为 Makefilemakefile 的 makefile 文件和 .c 文件。 - dbush
另外,你是否在使用GNU make?(运行make -v来查找)。 - dbush
是的,所有文件都在同一个目录中,我正在使用GNU Make 4.1。http://i.imgur.com/r5EnwHj.png - Cashews
2个回答

6

您的makefile文件名不正确。

默认情况下,make会查找名为makefileMakefile的文件。而您的文件名为Makefile.txt,所以make无法找到它。

要么将文件名更改为makefileMakefile,要么使用-f选项指定makefile名称,例如:make -f Makefile.txt


2
你知道吗,我很蠢。谢谢,这解决了问题,我想我太习惯于Windows了。 - Cashews
1
请注意,当在错误的目录中运行make命令时,也可能会出现这种情况,即没有Makefile文件的情况。 - undefined

2

从您提供的图片中可以清楚地看到,您将文件命名为Makefile.txt。正如@dbush所说,makefile必须命名为Makefilemakefile。这些是make默认查找的唯一文件名。

否则,您需要运行make -f Makefile.txt


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