制作错误:缺少分隔符

问题描述 投票:0回答:14

我在运行时遇到以下错误

make

Makefile:168: *** missing separator.  Stop.

这是什么原因造成的?

makefile
14个回答
512
投票

在线手册 中所述,该错误的最常见原因是当

make
需要制表符时,行用空格缩进。

正确

target: 
\tcmd

其中

\t
是制表符(
U+0009

target:
....cmd

其中每个

.
代表一个空间(
U+0020
)。


21
投票

只是为了笑,以防其他人遇到类似的错误:

我遇到了臭名昭著的“缺少分隔符”错误,因为我调用了一个定义函数的规则

($eval $(call function,args))

而不是

$(eval $(call function,args))

($
而不是
$(
.


9
投票

这是您的 Makefile 中的语法错误。在没有看到文件本身或其相关部分的情况下,很难比这更具体。


7
投票

对我来说,问题是我在

# ...
多行变量定义中嵌入了一些行尾
define ... endef
注释。删除评论使问题消失了。


4
投票

我的错误是在带有多行扩展名的变量声明行上。我在“\”之后有一个尾随空格,这使得它成为一个无效的行继续。

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2

4
投票

在我的例子中,这个错误是由于缺少空间引起的。我的 makefile 中有这个 if 块:

if($(METHOD),opt)
CFLAGS=
endif

应该是:

if ($(METHOD),opt)
CFLAGS=
endif

如果之后有空格


4
投票

在我的例子中,我实际上缺少

ifeq
和下一行命令之间的一个选项卡。开始时没有空格。

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

应该是:

ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

注意

<tab>
是一个实际的制表符


3
投票

在我的案例中,接下来会导致错误。我试图在全球范围内执行命令,即在任何目标之外。

更新。要全局运行命令,必须正确形成。例如命令

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

会变成:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))

1
投票

在我的例子中,同样的错误是由于冒号

:
staging.deploy:
中丢失而引起的。所以请注意,这可能很容易出现语法错误。


1
投票

我在 qmake 生成的 Makefile 中缺少分隔符文件。我正在将 Qt 代码移植到不同的平台。我没有设置 QMAKESPEC 或 MAKE。这是我找到答案的链接:

https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5


1
投票

只是添加另一个可能出现的原因:

$(eval VALUE)

无效,将产生“缺少分隔符”错误。

$(eval IDENTIFIER=VALUE)

是可以接受的。当我用

define
定义了一个宏并尝试做

时,出现了这种错误
define SOME_MACRO
... some expression ...
endef

VAR=$(eval $(call SOME_MACRO,arg))

宏没有评估为赋值的地方。


0
投票

我有这个是因为在

PHONY

之后我没有冒号

不是这个,

.PHONY install
install:
    install -m0755 bin/ytdl-clean /usr/local/bin

但是这个(注意冒号)

.PHONY: install
...

-2
投票

以下 Makefile 代码有效:

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

-3
投票

很明显,我所需要的只是“build-essential”包,然后先运行

autoconf
,这使得
Makefile.pre.in
,然后是
./configure
,然后是完美运行的
make
...

© www.soinside.com 2019 - 2024. All rights reserved.