Makefile 了解kbuild构建过程如何工作

Makefile 了解kbuild构建过程如何工作,makefile,kbuild,Makefile,Kbuild,我熟悉make和kbuild,以及构建系统的工作原理。但是我很难理解目标是如何建立的 例如,在Kbuild中,如果要在目录中生成一个对象文件,则会有一个makefile,其中包含以下内容: obj-$(CONFIG_FOO) += foo.o 这计算为obj-y/m并向其添加foo.o,我认为这个构建文件是使用submake调用的,然后主生成文件将使用obj-y或obj-m生成所有对象目标,对吗 我的问题是通常可以从主makefile/build文件传递到它的子make(即导出),但是obj

我熟悉make和kbuild,以及构建系统的工作原理。但是我很难理解目标是如何建立的

例如,在Kbuild中,如果要在目录中生成一个对象文件,则会有一个makefile,其中包含以下内容:

obj-$(CONFIG_FOO) += foo.o 
这计算为
obj-y/m
并向其添加
foo.o
,我认为这个构建文件是使用
submake
调用的,然后主生成文件将使用
obj-y
obj-m
生成所有对象目标,对吗


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

在深入研究了Busybox的整个构建系统之后,我想我理解了它背后的逻辑,因此我发现:

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