好的,所以即时进入内核模块开发和指南,几乎都使用包含这一行的相同基本make文件:
make -C /lib/modules/`uname -r`/build M=$(PWD) modules
所以我的问题是:
答案 0 :(得分:1)
递归使用make
是将模块化引入构建过程的常用技术。例如,在您的特定情况下,您可以通过将相关组件放在名称与该体系结构的uname -r
输出匹配的文件夹中来支持新体系结构,并且您不必更改主makefile文件所有。另一个例子,如果你将一个组件模块化,那么在不对新项目的主makefile进行大的改动的情况下,可以更容易地在另一个项目中重用。
将代码分成文件,模块和类(显然是C语言以外的语言)可能会有所帮助,将构建过程分成单独的模块会很有帮助。它只是一种组织形式,可以更轻松地管理您的项目。您可以将相关功能分组到单独的库或插件中,并单独构建它们。不同的个人或团队可以在单独的组件上工作,而不需要所有组件或团队都需要对主makefile的写访问权。您可能希望单独构建组件,以便可以单独测试它们。
当然,如果不递归使用make
,这并不是不可能完成所有这些事情,但它是组织事物的一种常见方式。即使你没有递归地使用make
,你仍然会得到一堆不同的组件" makefiles"在一个大项目中 - 它们只是被导入或包含在主makefile中,而不是单独站立并通过make
的单独调用运行。
为一个非常大的项目创建和维护单个makefile并不是一件小事。但是,正如文章Recursive make considered harmful所述,递归使用make
也不是没有问题。
至于你的M
,它只是在命令行覆盖一个变量。在makefile中的某个地方,将使用变量M
,如果您以这种方式在命令行指定其值,那么您指定的值将覆盖该变量中可能出现的任何其他赋值。生成文件(多个)。