【问题标题】:nmake inference rules limited to depth of 1nmake 推理规则限制为深度 1
【发布时间】:2011-06-16 01:44:05
【问题描述】:

我注意到nmake.exe 将其推理规则搜索限制为一个丢失的文件。我发现网上没有提到这个问题。我错过了什么吗?

$ cat Makefile .后缀:.a .b .d .e 全部:abc.e .a.b: 复制 $** $@ .b.d: 复制 $** $@ .d.e: 复制 $** $@ $ 触摸 abc.a $ nmake NMAKE:致命错误 U1073:不知道如何制作“abc.e” 停止。 $ nmake -n abc.a 'abc.a' 是最新的 $ nmake -n abc.b 复制 abc.a abc.b $ nmake -n abc.d NMAKE:致命错误 U1073:不知道如何制作“abc.d” 停止。

同样的 Makefile 使用 GNU make 生成以下内容:

$ make -n 
复制 abc* abc.b
复制 abc* abc.d
复制 abc* abc.e
rm abc.b abc.d

当然,$** 宏和copy 命令在 GNU make 中没有那么有用。 ;-)

你的nmake.exe 版本能更好地处理这个问题吗?有魔法开关吗?或者它真的像看起来那样破碎?

【问题讨论】:

    标签: nmake


    【解决方案1】:

    这里的问题是跟踪构建过程中的多步骤操作。您的源文件会生成某种中间文件,而这些中间文件又会生成最终的构建输出。在一个糟糕的宇宙中,您可能会对源文件进行更改,然后您的最终二进制文件仍然可以从中间文件的陈旧版本构建。显然,那会很糟糕。

    GNU make 采用一次建模整个依赖树的方法,并跟踪修改后的文件一直到输出。如果 make 是您使用的唯一构建工具,那就太好了。如果您有非常大的项目,这将无法正常工作,因此您需要按特定顺序制作它们。如果 'make' 不支持构建过程的某些工具,这将无法正常工作,因此无论如何您都需要多次运行 make。

    nmake.exe 采用最简单的方法:一次只做一次。它假设它将成为更大工具链的一部分。所以如果你有多遍依赖,你将需要多遍nmake。如果您的构建过程需要超过 3 次通过,那么您可能正在做一件坏事,您应该修复您的过程。为了大声喊叫,如果您需要多次通过,只需编写一个脚本即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多