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

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

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

obj-$(CONFIG_FOO) += foo.o 

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

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

最佳答案

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

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

https://stackoverflow.com/questions/22409682/

相关文章:

django - @login_required 和 is_authenticated() -- 在

authentication - oAuth 2.0 - 代表用户行事

django - Django 中的弱实体

sql - 有没有办法删除已经绑定(bind)到存储过程的用户定义表类型?

wpf - 在不破坏 ControlTemplate 的情况下将 setter 添加到 Contro

php - 在尝试使用 phpseclib 创建 SFTP 目录之前检查它是否存在

cartopy - 在 cartopy 轴之间画线

sapui5 - 禁用诊断工具快捷键

google-maps-api-3 - 地理距离 : Wolfram Alpha not agree

google-chrome-extension - 我可以在我的网站上有一个 chrome 扩展的安