Scons 创建后期目标

2024-06-16 14:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有两个工具:工具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的生成器?你知道吗


Tags: 工具envsourcetarget目标def发射器结构
1条回答
网友
1楼 · 发布于 2024-06-16 14:51:33

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

发射器在“解析阶段”运行,但生成器及其操作在“构建阶段”执行(在读入所有sconstruct之后)。 因此,如果您的Tool2_emitter真的需要Tool1的目标来解析/猜测它的已创建目标列表,那么您就很难在一次运行中成功构建。你知道吗

官方版本到此为止。;)但是您可以查看https://bitbucket.org/scons/scons/wiki/DynamicSourceGenerator,这可能有助于您克服上述限制。你知道吗

相关问题 更多 >