python - Scons:创建迟到的目标

标签 python scons

我们有两个工具:Tool1 和 Tool2。 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 。它只是返回在构建阶段“稍后”将创建或更新的目标。 SCons 将通过将“虚拟”文件(可能尚未物理存在)存储在内部数据结构中来记录此信息。稍后在实际构建期间解决依赖关系时也会使用该树。 请注意,“通过发射器更新目标和源列表”与“使用为当前构建器指定的单个操作构建目标”是完全不同的任务。关于生成的文件的名称,它们甚至不必匹配!

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

正式版就这么多了。 ;)但是你可以看看https://bitbucket.org/scons/scons/wiki/DynamicSourceGenerator这可能会帮助您克服上述情况中的限制。

关于python - Scons:创建迟到的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35056538/

相关文章:

集合内匹配的Python正则表达式

python - 有比覆盖整个函数更好的方法吗?

python - 如何将分组的文本逐一组合

python - discord.ext.commands.errors.CommandInvokeError : Command raised an exception: TypeError: __init__() missing 1 required positional argument: 'source'

static-libraries - 将静态库链接到另一个静态库

python - SCons - 为 CUDA、CORBA 等集成自定义构建器

python - 动态添加路线到 Pyramid

c - 如何根据编译器类型在 SConstruct for C 编译器中设置选项?

scons - scons如何在不同目录中构建SConscript

c++ - 分层源但单一目标的 SCons 设置