我得到以下错误运行make:

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

是什么导致了这种情况?


当前回答

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

if($(METHOD),opt)
CFLAGS=
endif

应该是:

if ($(METHOD),opt)
CFLAGS=
endif

if后面加一个空格。

其他回答

在我的例子中,错误导致了下一个。我尝试全局执行命令,即在任何目标之外。

乌利希期刊指南。要在全局运行命令,必须正确地构造一个命令。例如命令

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

正如在线手册中所指出的,该错误最常见的原因是当make期望制表符时,行被空格缩进。

正确的

target: 
\tcmd

其中\t为TAB (U+0009)

错误的

target:
....cmd

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

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

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

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

if($(METHOD),opt)
CFLAGS=
endif

应该是:

if ($(METHOD),opt)
CFLAGS=
endif

if后面加一个空格。