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的固定开销很小