GNU makefile标志“ -m”是什么意思,它如何在“ Obj -m + = simple.o”行中运行?

时间:2019-01-18 19:24:28

标签: gnu-make gnu option flags

我正在学习操作系统课程,我们被要求解释给定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。有人可以解释一下这行的含义和作用吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是内核树外模块的Linux kbuild makefile。正如@MadScientist指出的那样,您的第一行应阅读

obj-m += simple.o

在Linux kbuild上下文中,这意味着“编译并将simple.c链接到模块”。目标all(默认目标)将根据您当前正在运行的内核版本来构建模块。

注意::您需要安装内核开发标头才能使模块构建成功。

编辑:在Linux内核树中,您还会发现符号obj-y += X,其含义是“在启用此内核配置后,将X编译并链接到内核中”。