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
仅当您在命令行中明确要求时才会下载,或者如果依赖于它的某些东西由于其他原因需要重建。
在我的 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
仅当您在命令行中明确要求时才会下载,或者如果依赖于它的某些东西由于其他原因需要重建。