出错:缺少分隔符


Answers:


364

正如在线手册中指出的那样,导致该错误的最常见原因是,当make期望使用制表符时,行会缩进空格。

正确

target: 
\tcmd

\tTAB 在哪里(U + 0009)

错误

target:
....cmd

其中每个.代表一个空格(U + 0020)。


4
您可以使用.RECIPEPREFIX更改字符用法。请参阅:gnu.org/software/make/manual/html_node/...
ASEQ

16

仅出于笑容,以防万一有人遇到类似错误:

我收到了臭名昭著的“缺少分隔符”错误,因为我调用了将函数定义为

($eval $(call function,args))

而不是

$(eval $(call function,args))

($不是$(


什么?:)我猜你0x20那里没有“空格”,对吗?
user35443'6

3
@ user35443$
smac89 '16

8

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


5

对我来说,问题是我# ...define ... endef多行变量定义中嵌入了一些行尾注释。删除注释使问题消失了。


谢谢。我不知道define指令中的注释会按字面意义处理。实际上该行为文档中说明。(为清楚起见:#在指令中嵌入数字符号本身本身并不是语法错误。但是,它并不是解释为注释的开始,因此,这样做确实容易出错。)
ynn

3

我的错误是在具有多行扩展名的变量声明行上。我在“ \”后面有一个空格,这使该行继续无效。

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

1

以我为例,接下来会导致错误。我试图全局执行命令,即在任何目标之外。

UPD。要全局运行命令,必须正确地形成一个命令。例如命令

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

会成为:

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

1

在我的情况下,由于:在末尾缺少冒号,因此引起了相同的错误staging.deploy:。因此请注意,这可能是容易的语法错误。


1

就我而言,我实际上缺少介于两者之间的选项卡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>是实际的制表符


0

就我而言,此错误是由于缺少空格所致。我的makefile中有这个if块:

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

应该是:

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

在if之后留一个空格。



-1

因此很明显,需要所有我是“建立必要的”包,然后跑autoconf第一,这令Makefile.pre.in,那么./configure那么make它完美的作品...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.