M
不是一个选择make
.注意它缺少连字符.M
是分配给执行的变量make
.如果make
执行Makefile
脚本,则此脚本可以读取变量M
并使用其内容.
在您提供的示例中,make
将读Makefile
入~/kernel-2.6
并将您当前的工作目录分配给变量M
.通常,这将允许make
在处理后返回到当前目录Makefile
.
我有类似的测验
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
这里的make在我的项目目录中调用.-C
是选项:
-C dir, - directory = dir在读取makefile或执行其他操作之前,切换到目录dir.如果指定了多个-C选项,则每个选项都相对于前一个选项进行解释:-C/-C等等于-C/etc.这通常与make的递归调用一起使用.
M
不是选项,而是传递给它的参数.由于-C
更改了目录,我们知道make将读取该目录中的make文件.通过检查该目录中的make文件,我发现了它将要执行的操作M
:
从make文件(名为Makefile)指向的目录-C
(btw是内核构建目录):
# Use make M=dir to specify directory of external module to build # Old syntax make ... SUBDIRS=$PWD is still supported # Setting the environment variable KBUILD_EXTMOD takes precedence ifdef SUBDIRS KBUILD_EXTMOD ?= $(SUBDIRS) endif
来自Linux设备驱动程序的解释,第3版,Jonathan Corbet等:
此命令首先将其目录更改为随-C选项提供的目录(即您的内核源目录).在那里它找到了内核的顶级makefile.在尝试构建模块目标之前,M =选项会使makefile移回模块源目录.
阅读手册make
:
-C dir, --directory=dir Change to directory dir before reading the makefiles or doing anything else.
您的调用将目录更改为~/kernel
并make
在那里有效地调用,即Makefile
从该目录中读取.使用该M
变量,makefile知道您的实际项目文件的位置,并可以更改回该位置.
关键是你没有编写自己的makefile,而是使用一个一次性的版本.
M
不是一个选择make
.注意它缺少连字符.M
是分配给执行的变量make
.如果make
执行Makefile
脚本,则此脚本可以读取变量M
并使用其内容.
在您提供的示例中,make
将读Makefile
入~/kernel-2.6
并将您当前的工作目录分配给变量M
.通常,这将允许make
在处理后返回到当前目录Makefile
.