构建 makefile 依赖/继承树

2024-05-13

如果我解释得不好或者问了一些明显的问题,我很抱歉,但我是 Linux 内核的新手,而且有点深入……

我们有一个嵌入式 Linux 系统,它附带一个(文档非常糟糕的)SDK,其中包含数百个文件夹stuff,大多数文件夹包含rules.make,make,make.config或...的某些变体,并且根文件夹包含“master”makefile和rules.make,这意味着您可以从根文件夹中键入“make sysall” “它构建了整个包。

到目前为止一切顺利,但尝试调试它是一个问题,因为文档会这样说:

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

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

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

我假设我在这里缺少一个输出此信息的“make”选项,或者缺少一个可以正常工作的 makefile/config 的用法?


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

我对 Linux 内核还是个新手,而且有点深入……

and

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

您可以尝试以下操作:

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

基本上,您应该尝试确定您想要自定义的内容,并查看它如何与您的 SDK 交互。如果它是内核,那么仅使用它将为您提供一个起点。 Linux 内核有自己的 makefile 构建系统,名为kbuild。您可以在以下位置找到更多相关信息:内核的文档文件夹 https://www.kernel.org/doc/Documentation/kbuild/.

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

GNU Make 官方文档 https://www.gnu.org/software/make/manual/html_node/index.html

奥莱利的打开的书“使用 GNU Make 管理项目” http://oreilly.com/catalog/make3/book/

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

  • 制作师 https://code.google.com/p/makegrapher/

另外,检查这个问题 https://stackoverflow.com/questions/5032269/backtrace-for-gnu-make and this one https://stackoverflow.com/questions/2947821/graphing-the-dag-generated-by-make。您可能会从与您有相同问题的人那里找到有用的信息。

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 makefile 依赖/继承树 的相关文章

  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 使用 STL 流时如何格式化我自己的对象?

    我想将我自己的对象输出到 STL 流 但具有自定义格式 我想出了这样的东西 但由于我之前从未使用过 locale 和 imbue 所以我不知道这是否有意义以及如何实现 MyFacet 和operator 所以我的问题是 这是否有意义以及如何
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 在一个解决方案中调用不同项目的方法

    1 个解决方案中有 3 个项目 我对第一个项目中的主文件进行的主要操作 但是我需要调用第三个项目中的方法并使用类 例如 第三个项目有 public DataClasses1DataContext base global WindowsFor
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗

随机推荐