了解kbuild构建过程的工作原理

时间:2014-03-14 15:44:13

标签: makefile kbuild

我熟悉make和kbuild,以及构建系统的工作原理。但我很难理解对象目标的构建方式!?

例如,在Kbuild中,如果要在目录中生成目标文件,则可以使用类似以下内容的makefile:

obj-$(CONFIG_FOO) += foo.o 

这评估为obj-y/m并向其添加foo.o,我认为使用submake调用此构建文件,然后主makefile将生成所有对象目标< / strong>使用obj-yobj-m(取决于您正在构建的方式/内容),对吗?

我的问题是通常你可以从主makefile / build文件传递到它的submake(即export),但obj-y变量在很多地方定义那么如何在所有这些submake调用中构造或跟踪它的值?

1 个答案:

答案 0 :(得分:3)

在深入了解Busybox的整个构建系统之后,我想我理解它背后的逻辑,所以这就是我发现的:

  • 脚本目录中有共享的makefile(例如makefile.build,kbuild.include ...等),包含常用规则,构建配置和其他内容。
  • 这些共享的makefile是构建Kbuild makefile的那些(例如那些通常包含obj-$(CONFIG_FOO) += foo.o等代码的makefile)
  • 工作原理:
    • main makefile Makefile.build执行 submake 调用,并传递要构建的文件夹的路径/目录(即生成{{1} } from)作为命令行变量built-in.o
    • obj文件创建用于编译对象目标文件并将其链接到Makefile.build
    • 的通用规则
    • 然后主makefile从子目录中收集所有built-in.o并将它们链接在一起