waf 1.7 : How do you copy an environment?

标签 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' object is not callable

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

最佳答案

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

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

关于waf 1.7 : How do you copy an environment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632034/

相关文章:

c++ - 如何在 waf 构建系统中安装具有不同名称的库?

node.js - 在 ubuntu 12.04- "Project not configured (run ' waf configure' first 上安装 node.js 时出错)“

python - 使用waf,如何在配置期间检查python模块的最低版本?

c++ - 如何避免waf中的库多次检查?

c - Waf:创建自定义并行任务

c - 如何防止Waf重命​​名目标文件?

windows - 在 Windows 中使用 pkg-config 查找库

python - vim 为常用命令创建别名

msbuild - 有没有办法让程序检测它是否被 MSBuild 调用?

makefile - Waf(构建工具): PHONY targets like Make?