我在运行make时得到以下错误:
make
Makefile:168: *** missing separator. Stop.
是什么导致了这种情况?
正如在线手册中所指出的,该错误最常见的原因是当make需要制表符时,行被空格缩进。
target: \tcmd
其中\t为TAB (U+0009)
\t
U+0009
target: ....cmd
其中每个.代表一个SPACE (U+0020)。
.
U+0020
这是Makefile中的语法错误。如果没有看到文件本身或其中的相关部分,就很难更具体。
以下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
在我的例子中,错误导致了下一个。我尝试全局执行命令,即在任何目标之外。
乌利希期刊指南。要在全局运行命令,必须正确地构造一个命令。例如命令
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
将成为:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
只是为了笑一笑,以防别人遇到类似的错误:
我得到了臭名昭著的“缺少分隔符”错误,因为我调用了将函数定义为的规则
($eval $(call function,args))
而不是
$(eval $(call function,args))
即($而不是$(。
($
$(
对我来说,问题是在define ... endef多行变量定义中嵌入了一些行末# ...注释。删除注释使问题消失了。
define ... endef
# ...
我的错误发生在具有多行扩展名的变量声明行上。我在“\”后面有一个尾随空格,这使得它是一个无效的行续。
MY_VAR = \ val1 \ <-- 0x20 there caused the error. val2
在我的例子中,这个错误是由于缺乏空间造成的。我在我的makefile中有这个if块:
if($(METHOD),opt) CFLAGS= endif
应该是:
if ($(METHOD),opt) CFLAGS= endif
if后面加一个空格。
所以显然,我所需要的只是“构建必要”包,然后首先运行autoconf,这使得Makefile.pre.in,然后./configure,然后make完美地工作……
autoconf
Makefile.pre.in
./configure
在我的例子中,导致了相同的错误,因为在staging.deploy:结尾缺少colon:。所以请注意,这可能是一个简单的语法错误。
staging.deploy:
:
我在qmake生成的Makefiles中丢失了分隔符文件。我把Qt代码移植到一个不同的平台。我没有QMAKESPEC或MAKE集。这是我找到答案的链接:
< a href = " https://forum.qt。Io /topic/3783/missing-separator-error-in-makefile/5" rel="nofollow noreferrer">https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
在我的例子中,我实际上是失踪,一个位于ifeq和下一行命令之间的制表符。一开始就没有空间。
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>是一个实际的制表符
<tab>
再补充一个出现这种情况的原因:
$(eval VALUE)
无效,将产生一个“missing separator”;错误。
$(eval IDENTIFIER=VALUE)
是可以接受的。当我用define定义了一个宏并试图执行此操作时,出现了这种错误
define
define SOME_MACRO ... some expression ... endef VAR=$(eval $(call SOME_MACRO,arg))
宏没有计算为赋值。
这样做是因为PHONY后面没有冒号
PHONY
不是这个,
.PHONY install install: install -m0755 bin/ytdl-clean /usr/local/bin
但是这个(注意冒号)
.PHONY: install ...