运行make
时出现以下错误:
Makefile:168: *** missing separator. Stop.
造成这种情况的原因是什么?
答案 0 :(得分:298)
答案 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