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 命令在第一个目标之前开始的主要内容,如果未能解决你的问题,请参考以下文章

“在第一个目标之前开始。停止。“错误

makefile文件详解

uboot的Makefile里面为啥有两个all目标阿

第3课 - makefile伪目标的引入

Makefile学习

makefile 执行另一个目标