SCONS:制作一个特殊的脚本构建器取决于另一个构建器的输出

时间:2010-09-06 10:27:12

标签: yacc scons

我希望这个标题澄清了我想问的内容,因为它有点棘手。

我为每个子网提供了一个SCONS SConscript,如下所示(在linux中进行,如果重要的话):

  • src_dir
    • 编译器
      • SConscript
      • yacc srcs
    • 脚本
      • legacy_script
    • 数据
      • SConscript
      • yacc的数据文件

我使用不带副本的variant_dir,例如:
SConscript('src_dir/compiler/SConscript', variant_dir = 'obj_dir', duplicate = 0)

构建yacc后产生的obj_dir是:

  • obj_dir
    • 编译器
      • compiler_compiler.exe

现在就是这笔交易 我在数据目录中有另一个SConscript需要做两件事: 1.使用yacc编译的编译器编译数据
2.获取编译器的输出并使用legacy_script运行它我无法更改
   (legacy_script,获取已编译数据的输出并构建一些h文件以供其他软件依赖)

第1号很容易实现:
linux_env.Command('[output1, output2]', 'data/data_files','compiler_compiler.exe data_files output1 output2')

我的问题是2:如何使脚本运行器依赖于另一个目标的输出
为了澄清它,我需要运行SCONS(并且只有在compiler_output改变时):
src_dir/script/legacy_script obj_dir/data/compiler_output obj_dir/some_dir/script_output
(该脚本的用法是:legacy_script input_file output_file)

我希望自己清楚明白,随意提出更多问题......

1 个答案:

答案 0 :(得分:0)

我最近遇到类似的问题,当我需要先编译Cheetah模板时,然后从另一个Builder使用它来生成来自不同来源的HTML文件。

如果将第一个构建器的构建输出定义为第二个构建器的源,SCons将以正确的顺序运行它们,并且仅当中间文件已更改时才会运行它们。

沃尔夫冈