2012-02-16 18 views
1

目標這是我的主要SConstruct文件SCons的 - 如何提供顯式依賴於跨腳本

env = Environment() 

gen_source = env.SConscript(
     'generate_sources.scons', 
     variant_dir='derived_src', src_dir='src', 
     duplicate=0) 
compile_source = env.SConscript('compile.scons', 
     variant_dir='build', src_dir='derived_src', 
     duplicate=0) 
env.Depends('build/', 'derived_src/') 

gen_source與一個源發電機目標,從我的源目錄輸出在derived_src/文件,compile_source一個腳本具有多個目標的腳本。

如果沒有靶在命令行設置,即運行scons,就會產生源然後編譯,但如果提供了的目標,如scons pg_test然後scons的將失敗,並且抱怨derived_src/some_file不存在。

建立這種目標關係的最佳方式是什麼?最好我希望改變它的行爲,使它只產生將要被編譯的源。

回答

1

根據您是從gen_source和compile_source SConscript執行返回,如果它的目標清單那麼我想這更有意義的設置是這樣的依存關係:

env.Depends(compile_source, gen_source) 

或者,如果你」再沒有返回目標列表,然後在最起碼的目錄相對付諸根SConstruct,像這樣:

env.Depends('#build', '#derived_src') 

而且又進了一步。將這些目錄中有水珠指定的文件,可能()

希望有幫助。

+0

我已經找到了一種方法在我的compile.scons文件中導出()'我生成的源文件節點和'導入()'這些文件,正如預期的那樣工作,設置了正確的依賴關係。謝謝! – koo 2012-02-17 00:46:23