2010-07-23 89 views
8
#kernel build system and can use its lanauge 
ifneq($(KERNELRELEASE),) 
obj-m:=helloworld.o 
else 
KDIR:= /lib/modules/2.6.33.3-85.fc13.i686/build 
all: 
make -C $(KDIR) M=$(PWD) modules 
clean: 
rm -f *.ko *.o *.mod.o *.mod.c *.symvers 
endif 

的错误是:生成文件:缺少分隔

makefile:2:*** missing separator . stop

但对于ifneq($(KERNELRELEASE),),如果我前面加上一个标签,我得到另一个错误:

makefile:2: ***commands commence before first target. stop

回答

20

ifneq(之间必须有一个空格。

的TAB前缀意味着它是一个外壳命令,所以要确保外壳命令(makerm)使用TAB开始,并且所有其它线路,如ifneq不与TAB开始。

+0

对于以tab开头的shell命令+1 – 2013-02-27 19:58:24

0

检查obj-m:KDIR:前等等你的标签插入为空格?

+0

是的。我相信这是一个标签不是空格。 – Grey 2010-07-23 03:15:39

0

你错过了条件ifneq的第二部分($(KERNELRELEASE),)需要在逗号后面加上一些东西,比如“2.6.17”(例如)。

+1

我不认为这是问题..我从书中复制该行.. – Grey 2010-07-23 03:44:02

1

Make抱怨第二行不是以制表符开头。您的IDE /文本编辑器可能会使用空格将文件保存为与制表符相同的文件。将IDE配置为使用制表符,或者使用像vim或nano这样的简单编辑器,并用制表符替换第二行上的前导空格。