2017-08-12 74 views
1

WAF的書表明,我可以創建一個任務發生器將複製文件:複製多個文件

def build(ctx): 
    ctx(source='wscript', target='foo.txt', rule='cp ${SRC} ${TGT}') 

這將導致一個目標,與waf configure list所示,叫foo.txt 。所以我可以這樣做:

waf configure build --targets=foo.txt 

這是一切都很好。

但是,假設我想複製200個文件,全部填充build目錄中的一個目錄,我們稱之爲目錄examples

如果我對200個文件中的每一個重複這一點,我將有200個目標,因此當我輸入waf configure list將獲得200個目標,並且waf configure list由於輸出的爆炸而變得實際上無用。

但我真的希望將這200個文件複製爲單個目標,以便我可以執行類似waf configure build --targets=examples的操作。我怎樣才能做到這一點???

回答

1

使用buildcopy工具:

import buildcopy 
... 
def build(ctx): 
    ctx(name = 'copystuff', 
     features = 'buildcopy', 
     buildcopy_source = ctx.path.ant_glob('examples/**')) 

這將examples目錄樹遞歸複製到build目錄。只有一個目標copystuff被引入。

順便說一句,如果你想複製一個文件:

ctx(features = 'subst', 
    source = '...', target = '...', 
    is_copy = True) 

的方式比調用系統的cp命令更好。

+0

非常感謝您的回答。 waf文件非常差。堆棧溢出需要更多的WAF專家。 – EMiller