Python 使用不同的配置源作为waf';强氧特性
根据我提出的问题,我想根据指定的构建变量在哪里使用不同的源,现在看来我在构建doxygen文档时遇到了相同的问题,因为我需要基于构建变量的不同配置 示例保持不变,但会变长一些: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的定义中
目录结构如下所示:
- 医生
- a、 conf#源a的氧气源配置
- b、 conf#源b的氧气源配置
- 样式表文件#两者相同
- src
- a、 c
- b、 c
- 强氧
- wscript
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)