2

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

例如,在 Kbuild 中,如果你想在一个目录中生成一个目标文件,你将有一个 makefile,它包含以下内容:

obj-$(CONFIG_FOO) += foo.o 

这评估obj-y/m并添加foo.o到它,我认为这个构建文件是使用调用submake的,然后主makefile将使用或者(取决于你正在构建的方式/内容)生成所有对象目标,对吗?obj-yobj-m

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

4

1 回答 1

3

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

  • 在脚本目录中有共享的makefile(例如makefile.build、kbuild.include…等),其中包含通用规则、构建配置和其他内容。
  • 这些共享的 makefile 是构建 Kbuild makefile 的文件(例如,通常包含类似代码的文件obj-$(CONFIG_FOO) += foo.o
  • 这个怎么运作:
    • makefile执行submake调用Makefile.build,并将要构建的文件夹的路径/目录(即生成built-in.o自)作为命令行变量( obj)
    • Makefile.build文件创建用于编译目标文件并将它们链接到built-in.o
    • 然后主makefileobject-in.o从子目录中收集所有并将它们链接在一起
于 2014-03-17T19:17:29.057 回答