在Mac OS X上使用Makefile时出现问题:找不到目标。

3

我正在 OS X 上编写一个 makefile,遇到了问题。我已经按照规定做了一切(我认为),但只有部分工作正常。当我尝试:

make file1

或者:

make file2

一切似乎都很好,但当我尝试时:

make all

或者:

make clean

I get the typical :

*** No rule to make target

这里是代码,希望你能发现问题所在:
CC = gcc
CFLAGS=-Wall
FILES=file1 file2

all: $(FILES)

file1: file1.c
    $(CC) $(CFLAGS) file1.c -o file1

file2: file2.c
    $(CC) $(CFLAGS) file2.c -o file2

clean: 
    $(RM) $(FILES)

欢呼!

1
没有明显的理由说明为什么显示的语法会导致问题,所以我怀疑 make file1 在没有使用任何 makefile 的情况下工作,并提供默认规则来进行编译(可能在编译时不使用 -Wall 选项)。你创建的makefile的名称是什么? - Jonathan Leffler
Makefile的文件名为makefile,你说得对:没有使用-Wall(我刚刚注意到了)。 - TanguyH
1
这很奇怪。仔细看一下这个名字:ls m* | od -c。看看字母是不是你期望的,并且名字的末尾没有空格或其他不正常的字符。但是,"no -Wall" 的观察实际上确认了问题在于 makefile 的名字,尽管目前还不清楚为什么它不起作用。你可以尝试使用 make -f makefile all,看看是否会有任何区别。 - Jonathan Leffler
我的终端似乎对此不友好,但我尝试从头开始重新制作一个包含完全相同信息的makefile,它可以顺利运行。你关于名称问题的观点肯定是正确的@JonathanLeffler,并感谢你提供的所有有用提示(以防再次发生,但不是名称问题)。 - TanguyH
1个回答

1

将评论转化为答案,主要是为了关闭问题。

没有明显的原因说明所显示的语法会导致该问题,因此我怀疑 make file1 在没有任何 makefile 的情况下工作,并提供默认规则来进行编译(并且可能在编译时不使用 -Wall 选项)。

您创建的 makefile 名称是什么?

makefile 的名称为 makefile,而且您是正确的:-Wall 没有被使用(我刚刚注意到)。

这很奇怪。仔细查看名称:ls m* | od -c。看看字母是否符合您的预期,以及名称末尾是否有空格或其他不正常的情况。

但是"no -Wall"的观察实际上证实了问题出在makefile的名称上,尽管为什么它不起作用还不明显。你可以尝试使用"make -f makefile all"来查看是否有任何区别。如果名称错误,则应该会告诉你无法打开makefile。
我试着从头开始重新制作一个包含完全相同信息的makefile,并且它运行得很顺利。你对名称问题肯定是正确的。
这种问题很奇怪和令人困惑,寻求帮助是明智的。

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