Python SCON:创建延迟目标

Python SCON:创建延迟目标,python,scons,Python,Scons,我们有两个工具:工具1和工具2。Tool1基于SourceFile创建一些TargetFile。Tool2使用Tool1(TargetFile)的输出作为源。结构与此类似: env.Tool1(TargetFile, SourceFile) env.Tool2(NewTargetFile, TargetFile) 问题在于Tool2的发射器使用TargetFile创建新目标: def Tool2_emitter(target, source, env): tar

我们有两个工具:工具1和工具2。Tool1基于SourceFile创建一些TargetFile。Tool2使用Tool1(TargetFile)的输出作为源。结构与此类似:

   env.Tool1(TargetFile, SourceFile)
   env.Tool2(NewTargetFile, TargetFile)
问题在于Tool2的发射器使用TargetFile创建新目标:

   def Tool2_emitter(target, source, env):
       target.append( CreateNewTargetFunc(source) )
       return target, source
但当Scons创建依赖项时,他无法找到TargetFile,因为它尚未创建


在创建依赖项之前,是否可以运行Tool1的生成器?

发射器实际上不是用来“构建”东西的,比如示例中的文件
TargetFile
。它只返回将在构建阶段“稍后”创建或更新的目标。SCON将通过在内部数据结构中存储“虚拟”文件(可能还不存在)来注意这些信息。稍后在实际构建期间解析依赖项时,也将使用此树。 请注意,“通过发射器更新目标和源列表”与“使用为当前生成器指定的单个操作构建目标”是完全不同的任务。关于生成的文件的名称,它们甚至不必匹配

发射器在“解析阶段”运行,但生成器及其操作在“构建阶段”(在读取所有SConstructs之后)执行。 因此,如果您的
Tool2_发射器
确实需要Tool1的目标解析/猜测其创建的目标列表,那么您将陷入困境,无法在一次运行中成功构建

官方版本到此为止但是,您可以看看,在您的案例中,哪些可能有助于您克服上述限制