在内核模块中存在makefile obj-m
变量。请考虑以下事项:
CUR = $(shell uname -r)
DIR = /lib/modules/$(CUR)/build
PWD = $(shell pwd)
obj-m := m1.o m2.o
default:
$(MAKE) -C $(DIR) SUBDIRS=$(PWD) modules
在此Makefile
中,default
目标包含调用内核sub-make
的配方。 obj-m
变量未导出到环境中,因此sub-make
无法使用它。但是如果我们删除obj-m变量初始化,那么这个make
不会编译m1
和m2
内核模块。所以,问题是:
为什么内核子make依赖于这种情况下未导出的obj-m
变量?
答案 0 :(得分:3)
没有任何make变量导出到环境中。
SUBDIRS
被定义为make变量。
内核makefile在Makefile
中查找SUBDIRS
,读取它,并使用其中定义的任何obj-*
。
(根据documentation,您应该使用M
代替SUBDIRS
。)