2012-11-01 23 views
1

我想爲我的項目使用scons。我見到目前爲止如下:建立一個目錄以外的'src'與scons不復制dep到variant_dir

SConstruct

path = ['/usr/local/bin', '/usr/bin', '/bin'] 
libpath = ['/usr/local/lib', '/usr/lib', '/lib'] 
env = Environment() 
env.Append(ENV = {'PATH' : path}) 
env.Append(DFLAGS = ['-version=placeholder', '-g']) 
env.Append(LIBPATH = libpath) 
env.Append(DPATH = '#/build_debug/') 
Export('env') 
env.SConscript('src/SConscript', variant_dir = 'build_debug', 
       exports = {'DFLAGS' : '-debug'}) 

的src/SConscript

Import('env') 
env.Program(target = 'a.out', 
      source = ['stubs.d'] + Glob('*/*.d')) 

當試圖建立,但是,它給:

build_debug/foo/foo.d:9: Error: module bar is in file 'bar/bar.d' which cannot be read 

檢查ls build_debug顯示,並非所有文件都被複制過。

我認爲我早些時候工作過;但從那以後我肯定會搞砸了。我所有的源代碼都在project/src /中,我希望build/project在build/build中發生。我的SConstruct文件位於project /中。

回答

2

SCons不支持源代碼構建,所以不要被意外的行爲感到驚訝。

他們正在討論在SCons dev電子郵件列表中添加這個功能,但他們沒有說什麼時候。

香港專業教育學院發現,可以在腳本中加以改進的幾件事情:

在調用SConscript()在SConstruct,出口是DFLAGS變量,但在SConscript,你只導入「 env',所以DFLAGS變量不會顯示。您應該導入DFLAGS,或者將env中的DFLAGS設置爲一個不同的變量,然後從SConscript中的env中獲取它。

此外,林不知道庫路徑將按原樣正常工作。你有這樣的:

libpath = ['/usr/local/lib', '/usr/lib', '/lib'] 
env.Append(LINKFLAGS = libpath) 

但由於是,SCons的習慣在前面加上-L每個庫路徑。而不是使用LINKFLAGS使用LIBPATH,然後SCons將預先安排-L

+0

但我的印象是,variant_dir點是建立一個不是源代碼樹以外的目錄下?並感謝LIBPATH的事情。 – Infiltrator

+1

@Infiltrator,聽起來像我們需要澄清這一點。 SCons只支持構建與根SConstruct相同的子目錄結構的源代碼,同樣也與variant_dir的位置相同。通常情況下,源外指的是將variant_dir指定爲SConstruct下的目錄*** not ***。你想要做什麼? – Brady

+0

那麼也許我誤用了我的術語;我會更新這個問題來澄清。 – Infiltrator

0

你可以嘗試設置duplicate參數0

env.SConscript('src/SConscript', variant_dir = 'build_debug', 
       exports = {'DFLAGS' : '-debug'}, duplicate=0) 
+0

我的問題是,它不__複製東西。 :) 不管怎麼說,還是要謝謝你。 – Infiltrator

相關問題