2015-11-02 60 views
0

我正在構建具有多個環境的代碼,輸出到多個目標目錄。管理這個的自然方式似乎是使用變體目錄。所以我可能想用不同的選項和不同的VariantDirs多次構建相同的文件集。所以我希望能夠在不同位置擁有多個SConscript文件,所有文件都指向相同的源目錄。我試過SConscript在不同目錄中的源文件

一種選擇是要做到這一點:

SConstruct 
src/test.cpp 
src/magic/SConscript 

這是我SConstruct:

env = Environment() 

SConscript('src/magic/SConscript', 
    variant_dir = 'build/src', 
    src_dir = 'src', 
    exports={'env':env}, 
    duplicate=0) 

,這爲src /魔法/ SConscript:

Import('env') 

source = 'test.cpp' 

env.Object(source) 

我得到這個輸出:

scons: *** [build/src/magic/test.o] Source `src/magic/test.cpp' not found, needed by target `build/src/magic/test.o'. 

這看起來好像variant_dirsrc_dir都沒有被Object所尊重,因爲根本沒有提到magic

我誤解了variant_dir/src_dir是如何工作的嗎?用不同的目標構建同一組文件的最佳方法是什麼?

回答

0

您的文件/文件夾層次結構不符合SConstruct/SConscript文件中的構建規範。 注意在SCons的文件路徑如何,通常相對於當前SConscript的位置,所以:

source = 'test.cpp' 
env.Object(source) 

src/magic/SConscript被擴大到src/magic/test.cpp ......這顯然不存在。您可以使用../test.cpp作爲文件名,或將SCONScript從src/magic直接移到src文件夾。

一些進一步的說明:

1)當你指定在SConscript調用SConscript文件的名稱的路徑:

SConscript('src/SConscript', 
    variant_dir = 'build', 
    exports={'env':env}, 
    duplicate=0) 

使用SCons會自動從獲得的路徑src_dir參數第一個參數。 2)請查看UserGuide(http://www.scons.org/doc/production/HTML/scons-user.html)中的第14章「分層構建」。

+0

是的,看起來你是對的。我在看這裏的文檔:https://bitbucket.org/scons/scons/wiki/SConscript(),但我猜它已經過時了。 src_dir參數似乎完全被忽略。所以我看不到任何方法來做我需要的...有相同文件的多個SConscript文件具有不同的選項。我可能需要使用傳入的不同參數多次調用相同的SConscript文件。 – Stefan

+0

實際上,我認爲一個更好的解決方案可能是在源目錄中有多個SConscript文件,其名稱不同。我明天會試試。謝謝! – Stefan

+0

每次使用不同的環境調用相同的SConscript。查看https://bitbucket.org/dirkbaechle/scons_talks,特別是'scons_talks/pyconde_2013/examples/exvar /'作爲一個工作示例。 – dirkbaechle

相關問題