时间确定SCons目标

我有一些目标需要建立,以确定我的其他一些目标是什么。 我如何告诉SCons?

一个例子:

脚本, generate在一些配置文件上运行。 该脚本根据配置文件中的信息生成包含路径和构建标志。 为了构建SCons Object ,我需要读取生成的文件。

我只是在generate运行Execute() ,但它现在有很多文件需要生成,并且需要很长时间,所以我只想在它或配置文件更改时运行它。 一旦这个Command完成了它需要做的任何事情,我该如何告诉SCons在构建时问我一些更多的目标?


好的,首先是一些SCons的澄清。 Scons在构建过程中有两个阶段。 首先,在分析阶段执行所有Scons脚本,结果是一个静态依赖树,描述脚本中定义的所有构建器的源文件和目标文件。 接下来,基于该树,来自上次构建的构建数据库和光盘上的文件的签名,具有过期目标的所有构建者都将被重建。

现在你的问题。 如果您只想在必要时运行generategenerate或配置文件发生更改时),那么作为分析阶段的一部分运行generate是不成问题的。 所以不要使用Execute() 。 相反, generate必须是它自己的建造者。 到现在为止还挺好。

现在你有两个构建器,第一个构建器generate和第二个构建器,我称它为buildObjectbuildObject依赖于generate的目标,但正如您所述, generate目标在分析时未知(因为generate未运行,只能作为生成器进行设置)。 分析时未知的目标是SCons的一个经典挑战,并且没有简单的方法来解决它。

我通常使用我称之为SCons.pleaser文件来解决它。 在您的情况下,将是公知的目标generate生成包含高分辨率时间戳。 buildObject构建器然后将此文件作为源。 现在,如果你的配置文件没有改变, generate将不会运行,SCons.pleaser不会改变,并且buildObject不会运行。 如果你改变你的配置文件,生成将会运行,SCons.pleaser会改变,并且buildObject也会运行。

问候


我使用的解决方案是创建一个知道如何执行生成阶段的新SConstruct,并在我的SConscript中提前Execute()它,然后再到达需要其输出的位。 它工作得很好,因为它只是在SCons中调用SCons的固定开销很小的情况下根据需要构建。

链接地址: http://www.djcxy.com/p/67913.html

上一篇: time determination of SCons targets

下一篇: when mesg box exits it returns to prevoius activyty