我正在尝试使用以下Makefile编译程序thread.c
:
ifneq ($(KERNELRELEASE),)
obj-m := thread.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
运行make
时出现错误
Makefile:10:***缺少分隔符。停止。
我没有找到造成此问题的原因,有人可以帮助我解决这个问题吗?
答案 0 :(得分:2)
规则配方中的命令均必须以制表符开头。可能会有更多或其他空白,但是前导标签是必不可少的。
您的文件包含目标default
的规则,但是其配方中的单个命令并非以制表符(或任何空白)开头。原来那是第10行(假设您已经提交了整个文件),这确实是make
的诊断所暗示的行号。只需插入标签即可。就个人而言,我还将在endif
之前添加一个空白行,但这是一种样式建议,而不是一项要求。发挥作用:
ifneq ($(KERNELRELEASE),)
obj-m := thread.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
答案 1 :(得分:0)
我相信我以前遇到过此问题,尤其是在使用windriver时。通常,我只是nano它抱怨的特定文件,删除该行中的第一个空格,然后再添加回去。这很奇怪,但通常对我有用。