GNU Make,构建不必要的依赖项

GNU Make, building unnecessary dependencies

在我的 makefile 中有一个类似的规则;

res/resource.me: res/lengthy_dependency
   ... code that builds resources.me assuming lengthy_dependency is present ...

res/lengthy_dependency:
   ... Download 10GB data and stuff ...

这一切都很好,但是当 运行 res/resource.me 在构建时移除 res/lengthy_dependency 以保存 space。 我得到 lengthy_dependency 运行,而不是 "nothing to be done for res/resource.me"。

如果我注释掉 res/lengthy_dependency 的正文,并保持其他一切不变;我确实得到了 "nothing to be done for res/resource.me".

为什么构建 res/lengthy_dependency 的细节会影响构建与否?

注意:res/lengthy_dependency 没有任何子依赖项。 编辑:似乎 res/lengthy_dependency 中的任何主体都触发了它的重建。

这(或多或少)是 .SECONDARY 特殊目标的用途。如果您添加规则使某些东西依赖于 .SECONDARY,则只有在特别要求或需要一个不存在的目标时才会重建它:

.SECONDARY: res/lengthy_dependency

现在 res/lengthy_dependency 仅当您在命令行中明确要求时才会下载,或者如果依赖于它的某些东西由于其他原因需要重建。