我得到以下错误运行make:
Makefile:168: *** missing separator. Stop.
是什么导致了这种情况?
我得到以下错误运行make:
Makefile:168: *** missing separator. Stop.
是什么导致了这种情况?
当前回答
在我的例子中,我实际上在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>是一个实际的制表符
其他回答
在我的例子中,错误导致了下一个。我尝试全局执行命令,即在任何目标之外。
乌利希期刊指南。要在全局运行命令,必须正确地构造一个命令。例如命令
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
将成为:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
以下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中的语法错误。如果没有看到文件本身或其中的相关部分,就很难更具体。
只是为了笑一笑,以防别人遇到类似的错误:
我得到了臭名昭著的“缺少分隔符”错误,因为我调用了将函数定义为的规则
($eval $(call function,args))
而不是
$(eval $(call function,args))
即($而不是$(。
再补充一个出现这种情况的原因:
$(eval VALUE)
无效,将产生“缺少分隔符”错误。
$(eval IDENTIFIER=VALUE)
是可以接受的。当我用define定义宏并尝试执行时,出现了这种错误
define SOME_MACRO
... some expression ...
endef
VAR=$(eval $(call SOME_MACRO,arg))
宏没有计算为赋值。