【问题标题】:GCC -M dependency generation issueGCC -M 依赖生成问题
【发布时间】:2012-01-03 15:30:45
【问题描述】:

根据GNU's documentation

如果包含的文件很多,则使用\-newline 将规则分成几行。

运行以下命令后,为什么 gcc -M 的输出不符合预期?
如何确保每个依赖项出现在单独的行上?提前感谢您的帮助。

gcc -Iinc/ -Isrc/ -M -MM src/BitSet.c

BitSet.o: src/BitSet.c \
 inc/BitSet.h inc/StdDefs.h

我在 Windows 上使用 GCC 4.5.2 (MinGW)。

【问题讨论】:

  • 您显示的输出与您引用的文档一致,因此不确定如何处理您的第一个问题。对于第二个:你为什么想要那个?
  • 感谢您的快速编辑/回复。如果您注意到一行“inc/Library/BitManipulation/BitSet.h”和“inc/StdDefs.h”中有两个.h 文件。我正在使用 GCC 的依赖生成为我的项目编写基于 rake 的构建工具。我的意图是在源文件的任何依赖项发生变化时重新编译它。
  • 在同一行有多个标题会有什么问题吗?
  • 它的行为方式是因为make 以这种方式处理依赖关系。正如我所说,输出与文档一致。我不明白为什么当make 处理当前格式时,他们会添加一个选项来每行放置一个标题。
  • @thegreendroid:解析生成的 make 规则将比正确解析 C 代码容易得多,所以如果我是你,我会这样做。

标签: gcc dependencies


【解决方案1】:

你来错了。

如果包含的文件很多,则将规则拆分为 使用 \ -newline 的几行。

如果规则长于某个长度,则规则被拆分。文档中没有任何地方说规则将在每个标记之后拆分。

即预期输出中的故障,而不是观察到的输出中的故障。

关于您的评论(构建您自己的构建工具,使用gcc -M 输出进行依赖跟踪)...gcc -M 的输出旨在由make 解析,使用make 的解析规则。如果您想自己使用输出,则必须遵循相同的解析规则 - 开始并不难。

【讨论】:

  • 谢谢,我知道我在文档中的那一行遗漏了一些东西。我对make 的不熟悉让我认为这是 GCC 中的一个错误 :)
  • @thegreendroid:恕我直言,如果您不熟悉make,则不应尝试创建自己的构建工具。一,make 可能(并且可能是)您所需要的一切。第二,如果make 不符合要求,您应该知道原因和位置,因此您的自定义构建工具实际上是对make改进,而不仅仅是劣质的NIH 重制版。
  • 我实际上正在使用rake,我现在爱上了它。我从来没有学过make,但我认为我永远不需要,因为 rake 好得多,并且拥有 ruby​​ 的全部功能:)
  • @thegreendroid:我对任何使用 rake 的人都没有意见。但是“我从未学过 make 但我认为我永远不需要,因为 rake 好得多”这句话有一个严重的缺陷,应该是显而易见的。没关系,玩得开心。
  • 我明白你的意思,我将把它改写为“当我从事一个严重依赖它的项目时,我会学习make”。目前,rake 似乎可以很好地切芥末。感谢您的帮助:)
猜你喜欢
  • 2015-12-23
  • 2014-02-21
  • 1970-01-01
  • 2015-09-04
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多