waf 1.7:你如何复制环境?

时间:2012-11-29 18:11:25

标签: waf

我有一个waf文件,它为多个目标,多个平台以及在某些情况下构建多个架构构建了多个库。

我目前根据waf 1.7的文档设置了环境,如下所示:

def configure(conf):
   # set up one platform, multiple variants, multiple archs
   for arch in ['x86', 'x86_64']:
      for tgt in ['dbg', 'rel']:
         conf.setenv('platform_' + arch + '_' + tgt)
         conf.load('gcc')   # or some other compiler, such as msvc
         conf.load('gxx')
         #set platform arguments

但是,这会导致waf在配置期间输出多行搜索编译器。这也意味着我经常多次将关闭设置到同一环境。如果可能,我想做一次,例如:

def configure(conf):
    # set up platform
    conf.setenv('platform')
    conf.load('gcc')
    conf.load('gxx')
    # set platform arguments
    for arch in ['x86', 'x86_64']:
        for tgt in ['dbg', 'rel']:
            conf.setenv('platform_' + arch + '_' + tgt, conf.env.derive())
            # set specific arguments as needed

然而,conf.env.derive是一个浅层副本,conf.env.copy()给我错误'list'对象不可调用

这是如何在waf 1.7中完成的?

1 个答案:

答案 0 :(得分:4)

事实证明,答案是从顶级架构派生,然后分离以允许自己为配置添加更多标志。例如:

def configure(conf):
    conf.setenv('platform')
    conf.load('gcc')
    conf.load('gxx')
    for arch, tgt in itertools.product(['x86', 'x86_64'],  ['dbg', 'rel']):
        conf.setenv('platform')
        new_env = conf.env.derive()
        new_env.detach()
        conf.setenv('platform_' + arch + '_' + tgt, new_env)
        # Set architecture / target specifics