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

What does the GNU makefile flag "-m" mean, and how does it operate in the line "Obj -m += simple.o"?

我正在上一门操作系统课程,我们被要求解释给定生成文件的语法。但是,我无法理解其中的内容:

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。有人可以解释一下这行的含义和作用吗?

感谢您的帮助。

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

obj-m += simple.o

在 Linux kbuild 上下文中这意味着 "compile and link simple.c to the module"。目标 all(默认目标)将根据您当前 运行 使用的内核版本构建模块。

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

编辑: 在 Linux 内核树中,您还会找到符号 obj-y += X,这意味着 "compile and link X into the kernel when this kernel config has been enabled".