我正在学习操作系统课程,我们被要求解释给定makefile的语法。但是,我无法理解其内容:
Obj -m += simple.o
all:
make -C/lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C/lib/modules/$(shell uname -r)/build M=$(PWD) clean
我不明白的主要部分是第一行。据我了解,“ Obj”是变量名“ -m”是标志“ + =”是连接运算符“ simple.o”是目标文件。即使我知道零件,我也不知道这条线是做什么的。我已经进行了广泛的搜索,但是找不到“ -m”标志的任何解释。它仅显示在一个列表中,说明编译器知道忽略它,请参见此处https://www.gnu.org/software/make/manual/html_node/Options-Summary.html。有人可以解释一下这行的含义和作用吗?
感谢您的帮助。
答案 0 :(得分:1)
这是内核树外模块的Linux kbuild makefile。正如@MadScientist指出的那样,您的第一行应阅读
obj-m += simple.o
在Linux kbuild上下文中,这意味着“编译并将simple.c链接到模块”。目标all
(默认目标)将根据您当前正在运行的内核版本来构建模块。
注意::您需要安装内核开发标头才能使模块构建成功。
编辑:在Linux内核树中,您还会发现符号obj-y += X
,其含义是“在启用此内核配置后,将X编译并链接到内核中”。>