出现这个错误的原因通常是tab格式错误导致的。Makefile的命令行必须以一个tab作为开头,而Makefile中变量的定义、赋值以及Makefile内定函数如$(error “strings”)都不能以TAB开头,不然make会将其作为命令来处理!
打开Makefile文件,命令行的背景显示为红色,那问题应该就出在这里了:
眼看似乎是有一个tab的,而且编写Makefile也确实使用了tab键的,但是程序是不会骗人的~那就来检测一下吧!
这里使用cat
命令来显示tab键:cat -t Makefile
#makefile for the hello.c
obj-m := hello.o
CURRENT_PATH := $(shell pwd)
LINUX_KERNEL := $(shell uname -r)
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
all:
$(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
^Irm *.ko
^Irm *.o
[注]tab会被显示为^I
。
经检查,出问题的命令行前面确实没有tab,那我编写Makefile时键入的tab去哪里了呢?
原来这跟vim编辑器的配置有关系。我在vim的配置文件~/.vimrc
使用了set expandtab
语句,该语句会自动把tab转换为空格,这就导致了上述错误。
解决方案自然是注释掉这条语句"set expandtab
,或者干脆删掉这条语句。最后要记得修改Makefile,重新打开Makefile,删掉四个空格,重新键入tab,保存,退出。