出错:缺少分隔符

时间:2009-05-28 11:35:16

标签: makefile

运行make时出现以下错误:

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

造成这种情况的原因是什么?

13 个答案:

答案 0 :(得分:298)

online manual所示,该错误的最常见原因是当make期望制表符时,行会以空格缩进。

正确

target: 
\tcmd

其中\ t是TAB

错误

target:
    cmd

答案 1 :(得分:11)

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

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

($eval $(call function,args))

而不是

$(eval $(call function,args))

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

答案 2 :(得分:7)

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

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

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

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

会变成:

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

答案 6 :(得分:1)

就我而言,我实际上是缺少 console.log()和下一行命令之间的选项卡。开头没有空格。

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 是实际的制表符

答案 7 :(得分:0)

就我而言,这个错误是由于缺乏空间造成的。我在makefile中使用了if if:

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

应该是:

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

后面有空格。

答案 8 :(得分:0)

因此,显然,我需要的是“ build-essential”软件包,然后首先运行@Override public long skip(long n) throws IOException { // make sure not to skip fractional frames final long reminder = n % frameSize; if (reminder != 0) { n -= reminder; } if (n <= 0) { return 0; } if (frameLength != AudioSystem.NOT_SPECIFIED) { // don't skip more than our set length in frames. if ((n / frameSize) > (frameLength - framePos)) { n = (frameLength - framePos) * frameSize; } } long remaining = n; while (remaining > 0) { // Some input streams like FileInputStream can return more bytes, // when EOF is reached. long ret = Math.min(stream.skip(remaining), remaining); if (ret == 0) { // EOF or not? we need to check. if (stream.read() == -1) { break; } ret = 1; } else if (ret < 0) { // the skip should not return negative value, but check it also break; } remaining -= ret; } final long temp = n - remaining; // if no error, update our position. if (temp % frameSize != 0) { // Throw an IOException if we've skipped a fractional number of frames throw new IOException("Could not skip an integer number of frames."); } framePos += temp/frameSize; return temp; } ,首先生成autoconf,然后生成Makefile.pre.in,然后生成{{1} }效果很好...

答案 9 :(得分:0)

在我的情况下,由于:末尾缺少冒号staging.deploy:,导致了相同的错误。因此请注意,语法错误很容易。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

$(eval VALUE)

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

$(eval IDENTIFIER=VALUE)

是可以接受的。当我用 define 定义了一个宏并尝试执行

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

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

宏未评估为赋值的地方。

答案 12 :(得分:-1)

以下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