我们有两个工具:工具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将通过在内部数据结构中存储“虚拟”文件(可能在物理上还不存在)来注意这些信息。在实际构建期间解析依赖项时,稍后也会使用此树。 请注意,“通过发射器更新目标和源列表”与“使用为当前生成器指定的单个操作构建目标”是完全不同的任务。他们甚至不必匹配,关于产生的文件的名称!你知道吗发射器在“解析阶段”运行,但生成器及其操作在“构建阶段”执行(在读入所有sconstruct之后)。 因此,如果您的
Tool2_emitter
真的需要Tool1的目标来解析/猜测它的已创建目标列表,那么您就很难在一次运行中成功构建。你知道吗官方版本到此为止。;)但是您可以查看https://bitbucket.org/scons/scons/wiki/DynamicSourceGenerator,这可能有助于您克服上述限制。你知道吗
相关问题 更多 >
编程相关推荐