c++ - 如何使用 waf 制作库依赖图?

标签 c++ dependencies waf

我想在使用 waf 构建 C++ 项目时生成一个简单的 DOT 文件。理想情况下,我只想使用 bld 命令的 usetarget 属性来生成文件。这很容易注入(inject)系统吗?

例如这个 wscript 文件(仅提及我想使用的部分)

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

将产生输出

lib3 -> lib1
lib3 -> lib2

注入(inject)此行为的最佳位置在哪里?

谢谢!

最佳答案

您可以通过构建步骤中的 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)

注意:要获得真正好的输出,一些更多的过滤可能会有用

关于c++ - 如何使用 waf 制作库依赖图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959595/

相关文章:

c++ - 跨模板实例共享函数

c++ - 如何将比较器传递给内部 map ?

ruby - 不同环境的 Gemfile 依赖

python - 如何在 waf 中抑制构建命令的控制台输出?

c++ - 如何使用waf编译在运行时生成的c++源文件?

python - 读取环境/shell 变量

c++ - 使用没有内联代码的 dll 时出现 LNK2028 和 LNK2019 错误

C++ 类和链表 : adding & counting items

maven - 从命令行设置依赖项的版本

Django 迁移缺少声明 "needed_by"的方法?