【发布时间】:2014-02-11 23:50:28
【问题描述】:
我已经阅读了类似的问题,但找不到我的问题的解决方案。这是有问题的makefile:
EXE = proj05
SOURCES = proj05.support.c proj05.driver.c
OBJECTS := $(SOURCES:%.c=%.o)
CCFLAGS = -Wall
$(EXE): $(OBJECTS)
<tab>$(CC) $^ -o $@ o
clean:
<tab>$(RM) $(EXE) $(OBJECTS)
当我尝试运行 make 时,我收到一条错误消息,提示第 4 行“看到意外的行尾”。这是怎么回事?
编辑:我更改了疯狂的重复内容,但仍然出现相同的错误。
【问题讨论】:
-
GNU make 永远不会在任何地方打印带有单词“unexpected”的错误消息。这真的是确切的错误消息吗(在寻求帮助时,您永远不应该解释错误消息:始终剪切并粘贴整个准确的消息)?如果是,那么要么您没有使用 GNU make(请指定您正在使用的操作系统和 make),或者此错误不是由 make 生成的。当您收到该错误时,很可能这是正在编译的任何源文件中的问题。同样,如果您剪切并粘贴错误消息,这将立即清楚,并避免很多混乱。
-
好的,准确的错误信息:“make: Fatal error in reader: makefile, line 4: Unexpected end of line seen”这是在 SunOS 上,所以不是 GNU make。
-
那我真的帮不上忙。我的怀疑是,在从 Powerpoint (!) 剪切和粘贴的过程中,一些特殊的非 ASCII 字符在第 4 行潜入,这很难看到。也许
-Wall中的-不是ASCII 连字符(代码45),而是Solaris 无法识别的一些扩展的em 或en dash 字符。我会尝试使用 vi 或 Emacs 等简单的文本编辑器从头开始输入这个 makefile,或者至少是第 4 行。或者,您可以使用od -a Makefile之类的东西,看看第 4 行是否有任何奇怪的字符。 -
啊,Sun make(1s) 的乐趣。我很清楚,因为我在 Solaris 内核上工作,这就是我们使用的工具。问题就像我在其他地方的回答中提到的那样重新制作解析器。幸运的是,make(1s) 联机帮助页写得相当好。即便如此,这是一个非常复杂的野兽,我仍然必须每周至少检查一次。