Makefile 生成错误:缺少分隔符

Makefile 生成错误:缺少分隔符,makefile,Makefile,我在运行make时遇到以下错误: Makefile:168: *** missing separator. Stop. 导致此错误的原因是什么?如中所述,导致此错误的最常见原因是,当生成需要制表符时,行缩进了空格 对的 其中\t是选项卡(U+0009) 错 如果每个表示一个空格(U+0020)。如中所示,导致该错误的最常见原因是当生成制表符时,行缩进空格 对的 其中\t是选项卡(U+0009) 错 其中每个表示一个空格(U+0020)。这是生成文件中的语法错误。如果不查看文件本身或其相关部分

我在运行
make
时遇到以下错误:

Makefile:168: *** missing separator.  Stop.
导致此错误的原因是什么?

如中所述,导致此错误的最常见原因是,当
生成
需要制表符时,行缩进了空格

对的 其中
\t
是选项卡(
U+0009

错 如果每个
表示一个空格(
U+0020
)。

如中所示,导致该错误的最常见原因是当
生成制表符时,行缩进空格

对的 其中
\t
是选项卡(
U+0009


其中每个
表示一个空格(
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

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

在我的情况下,错误导致下一个。我尝试过全局执行命令,即在任何目标之外

UPD。若要全局运行命令,必须正确构造一个命令。例如命令

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
将成为:

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

在我的情况下,错误导致下一个。我尝试过全局执行命令,即在任何目标之外

UPD。若要全局运行命令,必须正确构造一个命令。例如命令

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))

i、 e.
($
而不是
$(

只是为了露齿而笑,以防其他人遇到类似错误:

我得到了臭名昭著的“缺少分隔符”错误,因为我调用了将函数定义为

($eval $(call function,args))
而不是

$(eval $(call function,args))

i、 e.
($
而不是
$(

对我来说,问题是在
定义…endef
多行变量定义中嵌入了一些行尾注释。

对我来说,问题是在
定义中嵌入了一些行尾注释。
注释e…endef
多行变量定义。删除注释可以解决问题。

我的错误出现在具有多行扩展名的变量声明行上。我在“\”后面有一个尾随空格,这使得该行继续无效

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

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

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

val1\在我的例子中,这个错误是由于缺少空间造成的。我的makefile中有一个if块:

if($(METHOD),opt)
CFLAGS=
endif
应该是:

if ($(METHOD),opt)
CFLAGS=
endif
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

在if之后有一个空格。

在我的例子中,这个错误是由于缺少一个空格造成的。我的makefile中有一个if块:

if($(METHOD),opt)
CFLAGS=
endif
应该是:

if ($(METHOD),opt)
CFLAGS=
endif
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

显然,我所需要的只是“build essential”包,然后首先运行
autoconf
,它在
中生成
Makefile.pre.in,然后是
/configure
然后是
make
,它工作得非常好…

显然,我所需要的就是“build essential”包,然后首先运行
autoconf
,它生成
Makefile.pre.in
,然后是
/configure
,然后是
make
,它运行得非常好…

在我的例子中,同样的错误是因为结尾处缺少冒号
,就像在
登台过程中一样。部署:
。因此请注意,它可以很容易地实现语法错误ke.

在我的例子中,相同的错误是因为结尾缺少冒号
,正如在
登台。部署:
中一样。所以请注意,这可能是很容易的语法错误。

我在qmake生成的Makefiles中缺少分隔符文件。我正在将Qt代码移植到另一个平台。我没有QMAKESPEC,也没有MAKE设置。下面是链接我找到了答案:


我在qmake生成的Makefiles中有丢失的分隔符文件。我正在将Qt代码移植到其他平台。我没有QMAKESPEC或MAKE set。以下是我找到答案的链接:


在我的例子中,我实际上
ifeq
和下一行的命令之间缺少了一个选项卡。开始时没有空格

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
应该是:

if ($(METHOD),opt)
CFLAGS=
endif
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
ifeq($(通配符$DIR\u文件),)
cd$FOLDER;cp-f$DIR_FILE.tpl$DIR_FILE.xs;
恩迪夫

注意
是一个实际的制表符

在我的例子中,我实际上缺少
ifeq
和下一行命令之间的制表符。没有空格

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
应该是:

if ($(METHOD),opt)
CFLAGS=
endif
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
ifeq($(通配符$DIR\u文件),)
cd$FOLDER;cp-f$DIR_FILE.tpl$DIR_FILE.xs;
恩迪夫

请注意,
是一个实际的制表符

,这只是为了增加另一个可能出现的原因:

$(eval VALUE)
无效,将产生“缺少分隔符”错误

可以接受。当我使用
define
定义宏并尝试执行此操作时,出现了这种错误

define SOME_MACRO
... some expression ...
endef

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

宏未计算为赋值的情况。

只需添加另一个原因即可显示:

$(eval VALUE)
无效,将产生“缺少分隔符”错误

可以接受。当我使用
define
定义宏并尝试执行此操作时,出现了这种错误

define SOME_MACRO
... some expression ...
endef

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

宏未计算为赋值的位置。

什么?:)我猜您没有
0x20
“空格”,对吗?@user35443
$
What?:)我猜您没有
0x20