2010-09-06 13 views
2

我希望标题能够澄清我想问的问题,因为它有点棘手。SCONS:制作一个特殊的脚本生成器取决于另一个生成器的输出

我有scons的SConscript为每个如下(在Linux中执行它,如果它事项)子目录:

  • src_dir
    • 编译
      • SConscript
      • YACC SRCS
    • s cripts
      • legacy_script
    • 数据
      • SConscript
      • 为YACC

我使用variant_dir没有副本,F数据文件或例如:
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)

我希望我自己清楚,感觉随意问一些更多的问题...

回答

0

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

如果您将第一个构建器的构建输出定义为第二个构建器的源,则SCons将按照正确的顺序运行它们,并且仅在中间文件发生更改时才运行它们。

沃尔夫冈

+0

是的,但命令生成器应该在legacy_script的SConscript,它的SRC是由另一个SConscript创建obj的目录,所以我怎么告诉他,SRC是吗? – 2010-10-04 14:10:26

+0

使用'#obj_dir/data/compiler_output'来引用生成的输出并将该文件用作'#obj_dir/some_dir/script_output'的源文件。 – 2010-10-05 09:08:41

+0

它工作!谢谢 – 2010-10-05 11:37:39