该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之类的操作。我怎样才能做到这一点???

最佳答案

使用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命令更好。

关于python - 仅使用单个目标在WAF中复制多个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45652196/

10-10 08:56