3

複数のターゲット、複数のプラットフォーム、および場合によっては複数のアーキテクチャ用に複数のライブラリを構築している 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 は configure 中にコンパイラを検索して複数の行を出力します。それはまた、同じ環境の近くに何度も頻繁にセットアップしていることを意味します. 可能であれば、これを一度実行したいと思います。たとえば、次のようになります。

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でどのように行われますか?

4

1 に答える 1

5

結局のところ、答えは最上位のアーキテクチャから派生し、デタッチして構成にフラグを追加できるようにすることです。例:

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
于 2012-11-29T22:04:59.513 に答える