我熟悉 make 和 kbuild,以及构建系统的工作原理。但是我很难理解对象目标是如何构建的!?
例如,在 Kbuild 中,如果你想在一个目录中生成一个目标文件,你将有一个包含如下内容的 makefile:
obj-$(CONFIG_FOO) += foo.o
这评估为 obj-y/m
并向其添加 foo.o
,我认为此构建文件是使用 submake
,然后主生成文件将使用 obj-y
或 obj-m
生成所有对象目标(取决于您构建的方式/内容) ,正确的?
我的问题 是,通常您可以从主生成文件/构建文件传递到它的子生成文件(即 export
),但是 obj-y
变量在许多地方定义,那么它的值是如何在所有这些 submake
调用中构建或跟踪的?
最佳答案
在深入研究了 Busybox 的整个构建系统之后,我想我理解了它背后的逻辑,所以这是我发现的:
obj-$(CONFIG_FOO) += foo.o
的代码)Makefile.build
执行 submake 调用,并传递要构建的文件夹的路径/目录(即从中生成 built-in.o
作为命令行变量 (obj
) Makefile.build
文件创建用于编译对象目标文件并将它们链接到 built-in.o
object-in.o
并将它们链接在一起https://stackoverflow.com/questions/22409682/