出错:缺少分隔符
Posted
技术标签:
【中文标题】出错:缺少分隔符【英文标题】:Make error: missing separator 【发布时间】:2010-10-29 13:21:54 【问题描述】:我在运行make
时遇到以下错误:
Makefile:168: *** missing separator. Stop.
这是什么原因造成的?
【问题讨论】:
这能回答你的问题吗? makefile:4: *** missing separator. Stop 【参考方案1】:如online manual 中所述,导致该错误的最常见原因是当make
需要制表符时,行会缩进空格。
正确
target:
\tcmd
\t
是制表符 (U+0009
)
错误
target:
....cmd
其中每个.
代表一个SPACE (U+0020
)。
【讨论】:
您可以使用 .RECIPEPREFIX 更改字符 make 使用。见:gnu.org/software/make/manual/html_node/…【参考方案2】:这是您的 Makefile 中的语法错误。如果不查看文件本身或其相关部分,很难比这更具体。
【讨论】:
【参考方案3】:以下 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
【讨论】:
请详细说明【参考方案4】:在我的情况下,错误导致了下一个。我尝试全局执行命令,即在任何目标之外。
UPD。要在全局范围内运行命令,必须正确形成一个。例如命令
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
会变成:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
【讨论】:
【参考方案5】:只是为了笑,以防其他人遇到类似的错误:
我得到了臭名昭著的“缺少分隔符”错误,因为我调用了一个将函数定义为的规则
($eval $(call function,args))
而不是
$(eval $(call function,args))
即($
而不是 $(
。
【讨论】:
什么? :) 我猜你那里没有0x20
“空格”,对吗?
@user35443 $
的位置【参考方案6】:
对我来说,问题是我在define ... endef
多行变量定义中嵌入了一些行尾# ...
cmets。移除 cmets 后问题就消失了。
【讨论】:
谢谢。我不知道define
指令中的 cmets 按字面意思对待。实际上,the documentation 中的行为不是解释。 (为了清楚起见:在指令中嵌入数字符号 #
本身并不是语法错误。但它不会被解释为注释的开头,因此这样做无疑容易出错。)【参考方案7】:
我的错误出现在带有多行扩展名的变量声明行上。我在“\”之后有一个尾随空格,这使得该行无效。
MY_VAR = \
val1 \ <-- 0x20 there caused the error.
val2
【讨论】:
【参考方案8】:在我的例子中,这个错误是由于缺少一个空格引起的。我的 makefile 中有这个 if 块:
if($(METHOD),opt)
CFLAGS=
endif
应该是:
if ($(METHOD),opt)
CFLAGS=
endif
if 后面有一个空格
【讨论】:
【参考方案9】:显然,我只需要“build-essential”包,然后首先运行autoconf
,这使得Makefile.pre.in
,然后是./configure
,然后是完美运行的make
...
【讨论】:
完全无法理解的答案,无论如何都不适用于该问题【参考方案10】:在我的例子中,同样的错误是因为冒号:
和staging.deploy:
一样在末尾丢失。所以请注意,这很容易出现语法错误。
【讨论】:
【参考方案11】:我在 qmake 生成的 Makefiles 中缺少分隔符文件。我正在将 Qt 代码移植到不同的平台。我没有设置 QMAKESPEC 或 MAKE。这是我找到答案的链接:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
【讨论】:
【参考方案12】:就我而言,我实际上缺少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>
是一个实际的制表符
【讨论】:
【参考方案13】:只是添加另一个可以显示的原因:
$(eval VALUE)
无效,将产生“缺少分隔符”错误。
$(eval IDENTIFIER=VALUE)
是可以接受的。当我用define
定义了一个宏并尝试这样做时,出现了这种错误
define SOME_MACRO
... some expression ...
endef
VAR=$(eval $(call SOME_MACRO,arg))
宏未计算为赋值的地方。
【讨论】:
【参考方案14】:我有这个是因为PHONY
后面没有冒号
不是这个,
.PHONY install
install:
install -m0755 bin/ytdl-clean /usr/local/bin
但是这个(注意冒号)
.PHONY: install
...
【讨论】:
以上是关于出错:缺少分隔符的主要内容,如果未能解决你的问题,请参考以下文章
make命令makefile出错:18:***缺少分隔符。停止