6

waf で C++ プロジェクトをビルドするときに、単純な DOT ファイルを生成したいと考えています。理想的には、コマンドの属性usetarget属性を使用してファイルを生成したいと思います。bldこれはシステムに簡単に注入できますか?

例:このwscriptファイル(使用したい部分だけ言及)

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

の出力を生成します

lib3 -> lib1
lib3 -> lib2

この動作を挿入するのに最適な場所はどこですか?

ありがとう!

4

2 に答える 2

5

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)

注: 本当に良い出力を得るには、さらにフィルタリングを行うと便利な場合があります

于 2015-03-27T11:49:22.330 に答える