使用不同的配置源作为 waf 的 doxygen 功能的输入
Use different configuration sources as input to waf's doxygen feature
根据我问的问题 ,我想根据指定的构建变体使用不同的来源,现在看来我在构建 doxygen 文档时遇到了同样的问题,因为我需要不同的基于构建变体的配置。
示例保持不变,但变长了一点:
目录结构如下所示:
- 文档
- a.conf # 源a的doxygen源配置
- b.conf # 源 b
的 doxygen 源配置
- stylesheetfile # 两者相同
- 来源
- a.c
- b.c
- doxygen.py
- wscript
waf doxygen.py
实现与 waf 项目 GitHub 上的存储库相同 doxygen.py。
扩展 waf 脚本以接受 doxygen
选项。但是在 doxygen
的定义中,不可能检查构建变体(这里 bld.variant
),这会导致错误,因为在 doxygen 功能中似乎没有定义构建变体。
我检查构建变体的部分在示例中用箭头标记。
我必须执行更改的内容、位置和方式,确保 doxygen 功能有效并使用基于构建变体的正确配置。
MWE:
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)
您的问题是您没有为 doxygen 命令定义变体。您应该添加如下内容:
variants = ['a', 'b']
for variant in variants:
dox = "doxygen"
class tmp(BuildContext):
__doc__ = '''executes the {} of {}'''.format(dox, variant)
cmd = dox + '_' + variant
fun = dox
variant = variant
一个最小的工作示例:
def configure(conf):
pass
def doxygen(bld):
print "variant =", bld.variant
# Create build commands with variants
from waflib.Build import BuildContext
variants = ['a', 'b']
for variant in variants:
dox = "doxygen"
class tmp(BuildContext):
__doc__ = '''executes the {} of {}'''.format(dox, variant)
cmd = dox + '_' + variant
fun = dox
variant = variant
根据我问的问题
示例保持不变,但变长了一点:
目录结构如下所示:
- 文档
- a.conf # 源a的doxygen源配置
- b.conf # 源 b 的 doxygen 源配置
- stylesheetfile # 两者相同
- 来源
- a.c
- b.c
- doxygen.py
- wscript
waf doxygen.py
实现与 waf 项目 GitHub 上的存储库相同 doxygen.py。
扩展 waf 脚本以接受 doxygen
选项。但是在 doxygen
的定义中,不可能检查构建变体(这里 bld.variant
),这会导致错误,因为在 doxygen 功能中似乎没有定义构建变体。
我检查构建变体的部分在示例中用箭头标记。
我必须执行更改的内容、位置和方式,确保 doxygen 功能有效并使用基于构建变体的正确配置。
MWE:
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)
您的问题是您没有为 doxygen 命令定义变体。您应该添加如下内容:
variants = ['a', 'b']
for variant in variants:
dox = "doxygen"
class tmp(BuildContext):
__doc__ = '''executes the {} of {}'''.format(dox, variant)
cmd = dox + '_' + variant
fun = dox
variant = variant
一个最小的工作示例:
def configure(conf):
pass
def doxygen(bld):
print "variant =", bld.variant
# Create build commands with variants
from waflib.Build import BuildContext
variants = ['a', 'b']
for variant in variants:
dox = "doxygen"
class tmp(BuildContext):
__doc__ = '''executes the {} of {}'''.format(dox, variant)
cmd = dox + '_' + variant
fun = dox
variant = variant