2010-07-23 195 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這樣的簡單編輯器,並用製表符替換第二行上的前導空格。