Makefile的问题
下面的makefile是不可以编译出ko文件的,但是把第5.6.7行注释掉,使用第8行的代码,则可以编译出ko文件,请问这是为什么??
1.PHONY:modules clean
2
3 ifneq ($(KERNELRELEASE),)
4
5 MSRC := $(wildcard *.c)
6 MOBJ := $(patsubst %.c,%.o,$(MSRC))
7 obj-m += $(MOBJ)
8 #obj-m := test.o
9
10 else
11
12 KERN_VER = $(shell uname -r)
13 KERN_DIR = /lib/modules/$(KERN_VER)/build
14 MPWD = $(shell pwd)
15
16 modules:
17 $(MAKE) -C $(KERN_DIR) M=$(MPWD) modules
18 rm modules.orderModule.symvers test.mod.c *.o
19
20 endif
21
22 clean:
23 rm -rf *.ko 写成MSRC := test.c就可以了
MSRC := $(wildcard *.c)下面加一句
$(warning $(MSRC))
make 发现是空
如果放在else后make 发现是test.c,但还是会出现两次空,还是不行。
可能和KERNELRELEASE有关。
我只能说这些了
这是一种构造内核模块的技巧,已经安装的模块目录下面,KERNELRELEASE指向内核构造系统。IF语句部分是为了寻找源码构造树,假如该目录没有符号链接那么会第二次进入MAKEFILE后会执行MODULES部分。楼主打印一下MSRC 的 变量看看。
页:
[1]