Scons SCON目标的构建时间确定

Scons SCON目标的构建时间确定,scons,Scons,我有一些目标需要建立,以确定我的其他目标是什么。我怎么告诉斯科恩 例如: 在一些配置文件上运行脚本,generate。此脚本根据配置文件中的信息生成包含路径和生成标志。为了构建SCons对象,我需要读取生成的文件 我刚刚在generate上运行了Execute(),但是它现在有很多文件要生成,而且需要很长时间,所以我只想在它或配置文件更改时运行它。一旦这个命令完成了它需要做的任何事情,我如何告诉SCON在构建时询问我更多的目标?好的,首先是一些SCON澄清。SCON在构建过程中有两个阶段。首先,

我有一些目标需要建立,以确定我的其他目标是什么。我怎么告诉斯科恩

例如:

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


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

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

现在谈谈你的问题。如果您只想在必要时运行
generate
(当
generate
或配置文件更改时),那么作为分析阶段的一部分运行
generate
是不可能的。所以不要使用
Execute()
。相反,
generate
必须是自己的生成器。到目前为止还不错

现在有两个构建器,第一个构建器
generate
,第二个构建器,我称之为
buildObject
buildObject
依赖于
generate
的目标,但正如您所述,
generate
目标在分析时是未知的(因为
generate
未运行,它仅设置为生成器)。在分析时有未知的目标是SCON面临的一个典型挑战,没有简单的方法来解决它

我通常使用我称之为
SCons.please的文件来解决它。
在您的情况下,
generate
生成包含高分辨率时间戳的已知目标。
buildObject
builder然后将此文件作为源文件。 现在,如果您的配置文件没有更改,
generate
将不会运行,SCons.please将不会更改,
buildObject
将不会运行。如果您更改了配置文件,则generate将运行,SCons.pleaster将更改,
buildObject
也将运行


关于

我采用的解决方案是创建一个新的SConstruct,它知道如何执行生成阶段,并在我的SConscripts中执行()
它,然后我就可以得到需要输出的位。它工作得很好,因为它只是根据需要构建一些东西,而从SCON内部调用SCON的固定开销很小