makefile 命令在第一个目标之前开始
Posted
技术标签:
【中文标题】makefile 命令在第一个目标之前开始【英文标题】:makefile commands commence before first target 【发布时间】:2015-09-14 08:48:11 【问题描述】:在制作文件中,我收到了以下错误消息; Makefile:4: *** 命令在第一个目标之前开始。停下来。
生成文件:
LINK_TARGET = sample4
OBJS = \
main.o \
remainder.o \
helloWorld.o
REBUILDABLES = $(OBJS) $(LINK_TARGET)
clean :
rm -f $(REBUILDABLES)
echo Clean done
all: $(LINK_TARGET)
echo All done
$(LINK_TARGET) : $(OBJS)
g++ -g -o $@ $^
%.o : %.cpp
g++ -g -o $@ -c $<
%.dep : %.cpp
g++ -M $(FLAGS) $< > $@
include $(OBJS: .o=.dep)
我该如何解决这个错误? 谢谢...
【问题讨论】:
我猜main.o
等之前的字符是制表符而不是空格。看起来你的转义反斜杠后还有一些空格。
我修复了标签问题,但现在我收到错误消息; main.o:1:警告:看到 NUL 字符;其余行忽略 main.o:1: *** 缺少分隔符。停止。
反斜杠后可能有空格。
我解决了这个问题。非常感谢。删除反斜杠后的空格并将makefile的最后一部分更改为; main.o : main.cpp helloWorld.cpp 剩余.cpp helloWorld.o : helloWorld.cpp 剩余.cpp 剩余.o : 剩余.cpp
【参考方案1】:
选项卡在 makefile 中具有特殊含义,因为它们标记命令行。您应该确保不要在 makefile 中使用制表符进行缩进。
行继续转义应该是行中的最后一个字符,包括空格。否则会被解析为试图转义空格而不是换行。
【讨论】:
语法感知编辑(例如 Emacs 中的makefile-mode
)可以帮助检测这两个问题(如果没有,您显然可以贡献补丁或错误报告)。我认为其他编辑器存在替代方案。以上是关于makefile 命令在第一个目标之前开始的主要内容,如果未能解决你的问题,请参考以下文章