Makefile错误:意外的行结束

时间:2014-02-11 23:50:28

标签: c makefile

我已经阅读了类似的问题,但找不到我的问题的解决方案。这是有问题的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行意外的行结束”。发生了什么事?

编辑:我改变了疯狂的重复内容,但仍然得到同样的错误。

4 个答案:

答案 0 :(得分:1)

第一个命令的单一美元有什么用?

<tab>$(CC) >>$<< $(CC) ...

答案 1 :(得分:1)

“第4行”有点误导,但这是$(EXE)规则的行,它的解析器 在决定不能再进行之前得到了。正如@ jia103所提到的那样 你的$(EXE)规则中有一个假的$。你也有出现的东西 编译器标志语法不正确 - 不应该有任何空格 在-o之间形成输出arg -o $@

我可以建议使用以下规则,而不是$(EXE)clean规则 你有吗?

%.o: %.c
<tab>$(CC) $(CFLAGS) -o $@ $<

$(EXE): $(OBJECTS)
<tab>$(CC) $(CFLAGS) -o $@ $(OBJECTS)

clean:
<tab>$(RM) $(EXE) $(OBJECTS)

(记得改成实际的制表符......)

最后一件事 - 如果您正在使用Solaris和Sun Make,那么您的c编译器实际上是Solaris Studio的可能性很大。在这种情况下,-Wall标志不起作用 - 这是一个gcc标志。请{I} cc -flags查看Studio C可用的选项。

答案 2 :(得分:1)

可能有不同系统的换行符表达式(例如Unix makefile中的Windows换行符号)。

您可以在Notepad ++中修复它:edit-&gt; EOL转换 - &gt; Unix(或Windows或旧Mac),或者您可以在要编译的机器上手动重新输入换行符。

答案 3 :(得分:0)

你不需要在不同部分之间留空吗? James的代码段有%.o:个目标,后跟一个空白行,然后是$(EXE):目标,后跟一个空行,然后是clean:目标。

现在我想起来了,我相信空行不是可选的。

在您的代码段中,尝试在以<tab>开头的那个和以clean:开头的那个之间加一个空行。