use*_*069 20 c linux makefile linux-device-driver linux-kernel
make -C ~/kernel-2.6 M=`pwd` modules
Run Code Online (Sandbox Code Playgroud)
M ='pwd'在上面的行中是什么意思?
我无法理解这个解释:
在尝试构建模块目标之前,M =选项会使makefile移回模块源目录.
你能说得更清楚吗?
小智 18
M不是一个选择make.注意它缺少连字符.M是分配给执行的变量make.如果make执行Makefile脚本,则此脚本可以读取变量M并使用其内容.
在您提供的示例中,make将读Makefile入~/kernel-2.6并将您当前的工作目录分配给变量M.通常,这将允许make在处理后返回到当前目录Makefile.
4pi*_*ie0 17
我有类似的测验
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
这里的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
Run Code Online (Sandbox Code Playgroud)
来自Linux设备驱动程序的解释,第3版,Jonathan Corbet等:
此命令首先将其目录更改为随-C选项提供的目录(即您的内核源目录).在那里它找到了内核的顶级makefile.在尝试构建模块目标之前,M =选项会使makefile移回模块源目录.
Ker*_* SB 11
阅读手册make:
-C dir, --directory=dir
Change to directory dir before reading the makefiles or doing anything else.
Run Code Online (Sandbox Code Playgroud)
您的调用将目录更改为~/kernel并make在那里有效地调用,即Makefile从该目录中读取.使用该M变量,makefile知道您的实际项目文件的位置,并可以更改回该位置.
关键是你没有编写自己的makefile,而是使用一个一次性的版本.
小智 5
其他答案大多是正确的,但我想告诉你学习的方法。
M 不是一个选择M 是一个变量 MakefileMakefile的目录中的make -C。阅读 Makefile:有几条评论:
# 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 take precedence
ifdef SUBDIRS
KBUILD_EXTMOD ?= $(SUBDIRS)
endif
ifeq ("$(origin M)", "command line")
KBUILD_EXTMOD := $(M)
endif
Run Code Online (Sandbox Code Playgroud)
您可以搜索KBUILD_EXTMOD:
VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
Run Code Online (Sandbox Code Playgroud)
这就是内核如何Makefile构建您的树外源。
在 Unix shell 中,`foobar`在命令中间写入意味着“运行该命令foobar并在此处替换其输出”。
因此,包含M=`pwd`在make命令中意味着“运行pwd命令来打印当前工作目录,并将M变量设置为该值”。
| 归档时间: |
|
| 查看次数: |
16192 次 |
| 最近记录: |