Scons构建顺序

Scons build order

我们有两个工具:Tool1 和 Tool2。 Tool1 基于 SourceFile 创建一些 TargetFile。现在我们要使用 TargetFile int Tool2 创建另一个 NewTargetFile。结构类似于:

   env.Tool1(TargetFile, SourceFile)
   env.Tool2(NewTargetFile, TargetFile)

Tool2 的发射器正在使用 TargetFile 做一些魔法。结果,Scons 说它无法打开 TargetFile(因为它尚未构建)。

如何让 Scons 在 Tool2 之前构建 Tool1?

您应该能够使用第一次调用(一个节点或节点列表)的 return 值作为第二次调用的输入:

res = env.Tool1(TargetFile, SourceFile)
env.Tool2(NewTargetFile, res)

这应该会自动创建所需的依赖项。通常,将简单的文件名指定为字符串,如 "foo.in",对于 TargetFile 也应该有效。但我猜你的 Emitter 是在耍花招, returning 额外的文件名,或者一个与 TargetFile 完全不同的文件名。您可能需要检查 return 值:

res = env.Tool1(TargetFile, SourceFile)
print map(str, res)
env.Tool2(NewTargetFile, res)

,或类似的。