Python 使用不同的配置源作为waf';强氧特性

Python 使用不同的配置源作为waf';强氧特性,python,doxygen,waf,Python,Doxygen,Waf,根据我提出的问题,我想根据指定的构建变量在哪里使用不同的源,现在看来我在构建doxygen文档时遇到了相同的问题,因为我需要基于构建变量的不同配置 示例保持不变,但会变长一些: 目录结构如下所示: 医生 a、 conf#源a的氧气源配置 b、 conf#源b的氧气源配置 样式表文件#两者相同 src a、 c b、 c 强氧 wscript wafdoxygen.py实现与waf项目GitHub上的存储库相同 waf脚本被扩展以接受doxygen选项。但是在doxygen的定义中

根据我提出的问题,我想根据指定的构建变量在哪里使用不同的源,现在看来我在构建doxygen文档时遇到了相同的问题,因为我需要基于构建变量的不同配置

示例保持不变,但会变长一些:


目录结构如下所示:

  • 医生
    • a、 conf#源a的氧气源配置
    • b、 conf#源b的氧气源配置
    • 样式表文件#两者相同
  • src
    • a、 c
    • b、 c
  • 强氧
  • wscript
waf
doxygen.py
实现与waf项目GitHub上的存储库相同


waf脚本被扩展以接受
doxygen
选项。但是在
doxygen
的定义中,无法对照构建变量(此处
bld.variant
)进行检查,这会导致错误,因为doxygen功能中似乎没有定义构建变量

我检查构建变量的部分在示例中用箭头标记

我必须在何处以及如何实施更改,以确保doxygen功能正常工作并根据构建变量使用正确的配置。

MWE:

def选项(opt):
opt.load(['doxygen'],tooldir=os.path.join('doxygen.py'))
def配置(ctx):
加载('compiler_c')
def生成(bld):
如果不是bld变量:
bld.fatal('调用'waf build_a'或'waf build_b',然后尝试'waf--help')
如果bld.variant==“a”:
bld.program(source='a.c',target='app',includes='.',features=['doxygen']))
elif bld.variant==“b”:
bld.program(source='b.c',target='app',includes='.',features=['doxygen']))
其他:
bld.致命(“错误”)
#为每个生成上下文创建生成和清除命令
从waflib.Build导入BuildContext,CleanContext
对于“a b”中的x。拆分()
对于(BuildContext,CleanContext)中的y:
name=y.。\uuuu name\uuuu.replace('Context','').lower()
tmp(y)级:
__doc_uu=''执行{}''中的{}。格式(名称,x)
cmd=name+'\'+x
变量=x
def脱氧剂(bld):
导入系统
导入日志记录
从waflib导入日志
如果bld.env.DOXYGEN:

如果bld.variant==“a”:#您的问题是尚未为doxygen命令定义变量。您应该添加如下内容:

variants=['a','b']
对于变体中的变体:
dox=“doxygen”
类tmp(构建上下文):
__doc_uu=''执行{}''中的{}。格式(dox,variant)
cmd=dox+'.'+变量
fun=dox
变量
一个简单的工作示例:

def配置(conf):
通过
def脱氧剂(bld):
打印“variant=”,bld.variant
#使用变量创建生成命令
从waflib.Build导入BuildContext
变体=['a','b']
对于变体中的变体:
dox=“doxygen”
类tmp(构建上下文):
__doc_uu=''执行{}''中的{}。格式(dox,variant)
cmd=dox+'.'+变量
fun=dox
变量
def options(opt):
    opt.load(['doxygen'], tooldir=os.path.join('doxygen.py'))

def configure(ctx):
    load('compiler_c')

def build(bld):
    if not bld.variant:
        bld.fatal('call 'waf build_a' or 'waf build_b', and try 'waf --help'')

    if bld.variant == 'a':
        bld.program(source='a.c', target='app', includes='.',  features=['doxygen'])
    elif bld.variant == 'b':
        bld.program(source='b.c', target='app', includes='.', features=['doxygen'])
    else:
        bld.fatal('err')

# create build and clean commands for each build context
from waflib.Build import BuildContext, CleanContext

for x in 'a b'.split():
    for y in (BuildContext, CleanContext):
        name = y.__name__.replace('Context','').lower()
        class tmp(y):
            __doc__ = '''executes the {} of {}'''.format(name, x)
            cmd = name + '_' + x
            variant = x

def doxygen(bld):
    import sys
    import logging
    from waflib import Logs

    if bld.env.DOXYGEN:
        if bld.variant == 'a':    # <=================
            _conf = 'src/a.conf'  # <=================
        elif bld.variant == 'b':  # <=================
            _conf = 'src/b.conf'  # <=================
        else:                     # <=================
            bld.fatal('err')      # <=================

        bld.logger = Logs.make_logger('doxy.log', out)
        hdlr = logging.StreamHandler(sys.stdout)
        formatter = logging.Formatter('%(message)s')
        hdlr.setFormatter(formatter)
        bld.logger.addHandler(hdlr)

        bld(features='doxygen', doxyfile=_conf)