我需要构建一些目标才能确定我的其他目标是什么。我如何告诉SCons?
一个例子:
在某些配置文件上运行脚本generate
。此脚本根据配置文件中的信息生成包含路径和构建标志。为了构建一个SCons Object
,我需要读取生成的文件。
我刚刚在Execute()
上运行generate
,但现在要生成大量文件并且需要花费大量时间,所以我只想在它或配置文件发生变化时运行它。在Command
完成任务后,我如何告诉SCons在构建时向我询问更多目标?
答案 0 :(得分:2)
现在回答你的问题。如果您只想在必要时(generate
或配置文件更改时)运行generate
,那么在分析阶段中运行generate
是不可能的。所以不要使用Execute()
。相反,generate
必须是自己的构建者。到目前为止一切都很好。
现在你有两个构建器,第一个构建器generate
和第二个构建器,我称之为buildObject
。 buildObject
取决于generate
的目标,但正如您所述,generate
目标在分析时未知(因为generate
未运行,因此仅设置为建设者)。在分析时具有未知目标是SCons的经典挑战,并没有简单的方法来解决它。
我通常使用我称之为SCons.pleaser
的文件来解决它。
在您的情况下,generate
生成的包含高res时间戳的已知目标。然后,buildObject
构建器将此文件作为源。
现在,如果您的配置文件未更改,generate
将无法运行,则SCons.pleaser不会更改,buildObject
将无法运行。如果您更改配置文件,生成将运行,SCons.pleaser将更改,buildObject
也将运行。
此致
答案 1 :(得分:0)
我采用的解决方案是创建一个新的SConstruct,它知道如何进行生成阶段,并在我到达需要输出的位之前在我的SConscripts中提前Execute()
。它运行良好,因为它只需要在SCons中调用SCons的小额固定开销来构建必要的东西。