2010-09-06 37 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