构建makefile依赖/继承树

时间:2013-01-28 13:39:40

标签: c linux embedded makefile

道歉,如果我解释得很严重,或者问一些明显的流血事件,但我是Linux内核的新手并且有点深入...

我们有一个嵌入式Linux系统,其中包含一个(包含数百个 stuff 文件夹的(记录很糟糕的)SDK,大多数文件夹包含rules.make,make,make.config或一些变体of ...和包含“master”makefile&的根文件夹rules.make表示你可以从根文件夹中输入“make sysall”并构建整个包。

到目前为止一直很好,但是尝试调试它是一个问题,因为文档会说:

要让内核输出调试消息,只需定义#outputdebugmessagesplz

好的,但其中一些内容是在“master”make / rules文件中定义的,其中一些是在子make / rules / config文件中定义的,有些是在.h文件中......当然它是更好的是从“顶部”make.config开启/关闭这些东西,而不是修改单个.h文件,然后记得再次关闭它们。

所以我认为递归构建一个树是有用的,从主“make”文件开始并遵循它所做的一切,定义或重新定义的所有内容等......但是没有似乎是一种简单的方法吗?

我假设我错过了一个“make”选项,这个选项会抛出这个信息,或者使用makefile / config只会有效吗?

1 个答案:

答案 0 :(得分:2)

您的情况并不少见。在为嵌入式系统开发时,您可能会遇到许多以特定方式解决问题的自定义系统。由于人们已经对您的问题发表了评论,因此没有简单的方法来为您的makefile结构/框架生成依赖关系图。但有一些事情你可以尝试,我会根据你的情况尝试建立我的建议。既然你说过:

  

我是Linux内核的新手,有点深入...

  

我们有一个嵌入式Linux系统到达时(非常糟糕   记录)包含数百个文件夹的SDK

您可以尝试以下方法:

  • 如果您的SDK由第三方供应商提供,请尝试与他们联系并获得一些支持。
  • SDK通常提供一个抽象来处理几个组件,而不深入了解它们中的每个组件是如何工作的。尝试查明您的问题,就像您要自定义 内核配置一样,您可以在SDK上找到linux内核文件夹(假设您的SDK由一组文件夹组成,包含库,应用程序和东西的源代码,其中一个可能是内核之一)并运行 make menuconfig 。这将打开一个基于ncurses的配置GUI,您可以导航并选择内核选项。
  • 正如人们已经指出的那样,您可以尝试运行 make -n 并检查输出。您也可以尝试运行 make -p |更少并检查输出,但我不建议这样做,因为它只会打印由于读取makefile而产生的数据库(规则和变量值)。您必须解析此输出以找出您想要的内容。

基本上,您应该尝试查明要自定义的内容,并了解它与SDK的交互方式。如果它是内核,那么仅使用它将为您提供一个起点。 linux内核有自己的makefile-build系统,名为 kbuild 。您可以在kernel's Documentation folder找到有关它的更多信息。

除此之外,如果你有一个控制多个组件的复杂makefile结构,试图理解makefile的工作原理会对你有所帮助。以下是了解makefile的好资源:

GNU Make official documentation

O'Reilly's Open Book "Managing Projects with GNU Make"

此外,在尝试构建自己的工具之前,您可以检查是否有一个开源项目可以执行您想要的操作。谷歌的快速搜索给了我这个:

另外,请检查this questionthis one。您可能会从与您遇到相同问题的人那里找到有用的信息。

希望它有所帮助!