出错:缺少分隔符

Ren*_*h G 208 makefile

运行时出现以下错误make:

Makefile:168: *** missing separator.  Stop.
Run Code Online (Sandbox Code Playgroud)

是什么造成的?

dfa*_*dfa 319

在线手册中所示,该错误的最常见原因是当make需要制表符时,行会以空格缩进.

正确

target: 
\tcmd

其中\ t是TAB

错误

target:
____cmd

  • 您可以使用.RECIPEPREFIX来更改字符make使用.请参阅:https://www.gnu.org/software/make/manual/html_node/Special-Variables.html#Special-Variables (2认同)

Kra*_*lew 13

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

我得到了臭名昭着的"遗漏分隔符"错误,因为我调用了一个定义函数的规则

($eval $(call function,args))
Run Code Online (Sandbox Code Playgroud)

而不是

$(eval $(call function,args))
Run Code Online (Sandbox Code Playgroud)

($eval $(call...而不是$(eval $(call....

  • @ user35443`$`的位置 (3认同)

unw*_*ind 8

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


Has*_*oto 6

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

if($(METHOD),opt)
CFLAGS=
endif
Run Code Online (Sandbox Code Playgroud)

这应该是:

if ($(METHOD),opt)
CFLAGS=
endif
Run Code Online (Sandbox Code Playgroud)

if 后面有一个空格。


Nen*_*ena 6

就我而言,我实际上缺少中间的一个选项卡ifeq和下一行的命令。一开始就没有空间。

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Run Code Online (Sandbox Code Playgroud)

本来应该:

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

请注意,这<tab>是一个实际的制表符


Hug*_*ues 5

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


小智 5

我的错误发生在具有多行扩展的变量声明行上。我在“\”后面有一个尾随空格,这使得它成为无效的行延续。

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2
Run Code Online (Sandbox Code Playgroud)