2013-11-13 2 views
2

Я хотел бы создать простой файл DOT при создании проекта на C++ с помощью waf. В идеале я хотел бы просто использовать атрибуты и target команды bld для генерации файла. Легко ли оно инъектируется в систему?Как я могу создать график зависимости библиотеки с waf?

например. Этот WScript файл (только упоминая части, которые я хотел использовать)

def build(bld): 
    bld(use = [ 'lib1', 
       'lib2', ] , 
     target = 'lib3') 

производят ли выход

lib3 -> lib1 
lib3 -> lib2 

Где бы лучшее место, чтобы придать такое поведение?

Спасибо!

ответ

1

Вы можете добавить добавить инструмент, как это легко с помощью add_post_fun на стадии сборки, что-то вместе, как это:

from waflib.Errors import WafError 
from waflib import Utils 

def filter_uses(ctx, uses): 
    filtered = [] 
    for use in uses: 
     try: 
      ctx.get_tgen_by_name(use) 
      filtered.append(use) 
     except WafError: 
      pass 
    return filtered 

@Utils.run_once # print only once, even if used in multiple script 
def make_dot_file(ctx): 
    for group in ctx.groups: 
     for taskgen in group: 
      uses = Utils.to_list(getattr(taskgen, 'use', [])) 
      uses = filter_uses(ctx, uses) # Optional, only print TaskGens 
      try: 
       name = taskgen.name # Sometimes this fails, don't know why 
       print "{} -> {}".format(name, ", ".join(uses)) 
      except AttributeError: 
       pass 


def build(bld): 
    # Build stuff ... 
    bld.add_post_fun(make_dot_file) 

Примечание: Для того, чтобы получить реальный хороший выход еще несколько фильтрации может быть полезным

Смежные вопросы