构build一个makefile依赖/inheritance树

道歉,如果我解释这很糟糕,或者要求出血明显,但我是Linux内核的新手,有点在深处…

我们有一个embedded式Linux系统,这个系统包含一个非常糟糕的SDK,其中包含数百个文件夹,大多数文件夹包含一个rules.make,make,make.config或者一些变体,而根文件夹包含一个“master”makefile&rules.make,这意味着你可以从根文件夹中input“make sysall”,然后构build整个包。

到目前为止这样好,但试图debugging它是有点问题,因为文档会说:

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

好的,但是这些东西中的一些是在“master”make / rules文件中定义的,其中一些是在子make / rules / config文件中定义的,一些是在.h文件中定义的。当然,它更好打开/closures这些东西从“顶部”make.config而不是修改个别.h文件,然后必须记得再次closures它们。

所以我认为从主“make”文件开始recursion地构build一个树,并遵循它所做的一切,定义或重新定义的所有东西,等等,但是似乎并没有一个简单的方法呢?

我假设我缺less一个“make”选项,把这个信息吐出来,或者只是makefile / config的用法。

Solutions Collecting From Web of "构build一个makefile依赖/inheritance树"

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

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

我们有一个嵌入式Linux系统,它包含了数百个文件夹的文件(非常糟糕的)

你可以尝试以下的事情:

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

基本上,您应该尝试确定要自定义的内容,并查看与SDK的交互方式。 如果它是内核,那么只与它一起工作会给你一个起点。 linux内核有自己的makefile-build系统,名为kbuild 。 您可以在内核的Documentation文件夹中找到更多关于它的信息 。

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

GNU Make官方文档

O'Reilly的Open Book “使用GNU Make管理项目”

另外,在尝试构建自己的工具之前,您可以检查是否有一个开源项目能够满足您的需求。 谷歌快速搜索给了我这个:

  • makegrapher

另外,检查这个问题 , 这一个 。 您可能会从与您遇到同样问题的人那里找到有用的信息。

希望能帮助到你!