2017-12-13 2 views
1

here에 지정된 빌드 변형을 기반으로 다른 소스를 사용하길 묻는 질문에 따라 doxygen 설명서를 작성하는 데 동일한 문제가있는 것 같습니다. 빌드 변형을 기반으로 다른 구성이 필요합니다.waf의 doxygen 기능에 대한 입력으로 다른 구성 소스 사용

의 예는 아주 동일하게 유지하지만, 조금 더의 얻을 :


디렉토리 구조는 다음과 같습니다 doxgen의

  • a.conf 번호의 설정

    • 문서 소스 코드 소스
    • b.conf # 소스 b에 대한 doxgen 소스 코드
    • ,515,
    • stylesheetfile 번호 모두
  • SRC
    • AC
    • BC
  • doxygen.py
  • WScript와는 대한 동일

웹 애플리케이션 방화벽 doxygen.py 실현하는 것이 인waf 프로젝트의 GitHub에있는 저장소와 동일 doxygen.py.


웹 애플리케이션 방화벽 스크립트는 doxygen 옵션을 받아들이 확장이다. 그러나 doxygen이라는 정의 내에서 빌드 변형 (여기 bld.variant)을 검사 할 수 없으며 doxygen 기능에 정의 된 빌드 변형이 없으므로 오류가 발생합니다.

빌드 변형을 확인하는 부분은 화살표가있는 예제에 표시되어 있습니다.

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) 

답변

1

귀하의 문제는 당신이 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 
당신은 같은 것을 추가해야
관련 문제