我得到以下错误运行make:

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

是什么导致了这种情况?


当前回答

再补充一个出现这种情况的原因:

$(eval VALUE)

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

$(eval IDENTIFIER=VALUE)

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

define SOME_MACRO
... some expression ...
endef

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

宏没有计算为赋值。

其他回答

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

在我的例子中,我实际上在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>是一个实际的制表符

再补充一个出现这种情况的原因:

$(eval VALUE)

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

$(eval IDENTIFIER=VALUE)

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

define SOME_MACRO
... some expression ...
endef

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

宏没有计算为赋值。

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

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

在我的例子中,同样的错误是由于冒号:在结束时丢失了stage .deploy:。所以请注意,这可能是一个简单的语法错误。