2013-04-23 44 views
3

我正在與Waf建立一個項目。它有幾個第三方依賴關係,我想從我的主要wscript構建每個依賴項。我的項目是組織這樣的:我的Waf wscript可以在當前目錄中調用其他wscripts嗎?

/boost/ 
/gtest/ 
/source/ 
/waf 
/wscript 
/wscript_boost 
/wscript_gtest 

每一個「依賴」 wscript_*已命令定義的,就像我的主要wscript

def options(opt): pass 
def configure(conf): pass 
def build(bld): pass 

如果我已經把依賴wscript文件的依賴文件夾,我可以打電話opt.recurse('boost gtest'),但我不希望我的文件與第三方文件混合。

有沒有辦法讓我的wscript撥打wscript_boostwscript_gtest

回答

2

我不認爲這是可能在目前的瓦夫執行(waflib.Context.Context.recurse使用全球WSCRIPT_FILE變量)。

雖然難看,但可以在你的主要wscript的開始破解這個:

import waflib.Context 
original_recurse = waflib.Context.Context.recurse 

def new_recurse(ctx,*args, **kwargs): 
    original_wscript_file = waflib.Context.WSCRIPT_FILE 
    try: 
    waflib.Context.WSCRIPT_FILE = (original_wscript_file + 
            kwargs.pop('suffix', '')) 

    original_recurse(ctx, *args, **kwargs) 
    finally: 
    waflib.Context.WSCRIPT_FILE = original_wscript_file 

waflib.Context.Context.recurse = new_recurse 

你的主要wscript會的是這樣的:

def configure(cfg): 
    cfg.recurse(suffix='_boost') 
    cfg.recurse(suffix='_gtest') 

注意,有一些副作用,因爲WSCRIPT_FILE是在wscript_boost文件中的後綴。

你也可以submit an issue到waf項目。

0

做到這一點的方法通常是把方法的wscript到每個子目錄,並使用遞歸:

/boost/ 
/boost/wscript 
/gtest/wscript 
/source/ 
/waf 
/wscript 

並使用遞歸:

def build(bld): 
    # ... 
    bld.recurse("boost") 
    bld.recurse("gtest") 
    # ... 
+0

是的,這就是我目前如何設置。不過,我不喜歡將我的項目文件與第三方依賴項混合在一起。我想確保我的第三方目錄完全匹配第三方提供的內容。 – 2013-04-25 14:27:54

相關問題