gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:58 25 4
gpt4 key购买 nike

我想在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com