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)
,或类似的。
我们有两个工具: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)
,或类似的。