关于简单内核模块Makefile文件???

ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
rm -rf .o *~ core .depend ..cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean
else
obj-m := globalmem.o
endif

ifeq ($(KERNELRELEASE),)这一句执行之后,else便不会再执行,但是为什么else还能起作用呢???

是这样的
ifeq...else...endif
也就是说,ifeq满足条件,那么就会执行下面的语句,而else就不会被执行了,否则执行else
也就是说他们两个只有一个会起作用,但是我发现他们两个都起作用了,改任何一个都会报错,为什么???

@ Drifter011 ,对对,就是这里不明白。按照代码分析——这句应该不起作用啊~~~但是按照逻辑分析——这句话应该起作用。就是这里不太明白
不知道代码怎么执行的???

你的问题不清楚,“else便不会再执行,但是为什么else还能起作用呢???”是什么意思?

哦,是这样的
ifeq...else...endif
也就是说,ifeq满足条件,那么就会执行下面的语句,而else就不会被执行了,否则执行else
也就是说他们两个只有一个会起作用,但是我发现他们两个都起作用了,改任何一个都会报错,为什么???

是不是后面还有类似obj-m := globalmem.o的语句在起作用