如何仅将GNU作为输出依赖项?

时间:2015-03-20 21:22:59

标签: assembly makefile gas 68000

我正在使用GNU bintools 2.25构建一个汇编语言项目,目标是m68k-elf,GNU make 3.81处理构建。 (由于这是一个仅限于汇编的项目,我没有为gcc构建m68k。)

在改进我的构建系统时,我希望能够为每个程序集文件自动生成依赖项列表,类似于-M*的{​​{1}}系列选项。 / p>

我发现我的gcc副本支持列出依赖关系的m68k-elf-as选项,因此我将以下规则添加到-MD

Makefile

虽然这主要有​​效,但我有两个具体问题。

  1. %.d: %.asm $(AS) --register-prefix-optional -m68000 -MD $@ $(ASFLAGS) $< 选项需要一个用于编写依赖项的文件名;我想把它转到STDOUT,所以我可以在-MD看一看之前用sed按摩它。我试过给它一个短划线(make),但它创建了一个具有该名称的文件,而不是指向STDOUT。

  2. 即使启用了-选项,-MD也会尝试汇总源代码,这可能会生成错误并停止整个构建过程。我希望它输出依赖项而不是组装代码,而不是执行这两个操作。

  3. 虽然现在这些只是烦恼,但我可以看到这对我的构建产生了很大的影响,因为项目变得更大 - 特别是后者。有没有办法让as输出依赖项而不尝试汇编代码?

1 个答案:

答案 0 :(得分:1)

-MD选项的文档说“'as'可以为它创建的文件生成依赖文件 ”(强调添加),它告诉我它不会在没有组装的情况下确定依赖关系。我不是那么流利的汇编程序,但这是GNU工具链的标准模型,也提供C语言,在这种语言中,如果不对源执行至少完整的预处理运行,就无法确定源依赖关系。

实际上,如果您按预期使用该模式,则该模式可以正常工作,仅作为构建项目的功能更新依赖项。您不需要更新该上下文之外的依赖项,因为如果您更新源以便添加新的依赖项,那么无论如何都需要重建该源,尽管它的年龄相对于新的依赖项。假设Makefile在下一次构建时使用修订的依赖关系信息进行更新,未来的构建将对新依赖关系的更改做出适当的反应。

对于按摩依赖项输出,将其写入文件只意味着您无法将其写入sed,而不是您无法使用sed处理它。