Bazel 如何获取目标依赖关系的依赖关系图?

Bazel 如何获取目标依赖关系的依赖关系图?,bazel,Bazel,我希望获得目标的所有依赖项的相互依赖关系,以便将此信息提供给二进制文件(用于静态分析) 我定义了一个通过直接依赖项循环的规则。如何获取每个依赖项的依赖项,以递归方式发现整个图?有可能吗?如果没有,是否有其他方法 def _impl(ctx): for i, d in enumerate(ctx.attr.deps): # I need to get dependencies of d somehow here 根据您想要的确切信息,Aspects可以执行您想要

我希望获得目标的所有依赖项的相互依赖关系,以便将此信息提供给二进制文件(用于静态分析)

我定义了一个通过直接依赖项循环的规则。如何获取每个依赖项的依赖项,以递归方式发现整个图?有可能吗?如果没有,是否有其他方法

def _impl(ctx):
    
    for i, d in enumerate(ctx.attr.deps):
        # I need to get dependencies of d somehow here

根据您想要的确切信息,Aspects可以执行您想要的操作:

它们允许规则从可传递依赖项收集附加信息

还有
genquery
规则,但这可能会或可能不会提供您想要的所有信息:


genquery
使bazel查询结果可用于操作。

根据您想要的确切信息,Aspect可能会执行您想要的操作:

它们允许规则从可传递依赖项收集附加信息

还有
genquery
规则,但这可能会或可能不会提供您想要的所有信息:

genquery
使bazel查询结果可用于操作。

我需要将参数--output=graph传递给
genquery

blaze query "kind(rule, deps(//path/to/mytarget))" --output=graph

我需要将参数--output=graph传递给
genquery

blaze query "kind(rule, deps(//path/to/mytarget))" --output=graph


是的,如果可以在规则中循环遍历目标的所有可传递依赖项,那么方面听起来是一个正确的方向。我觉得这可能是个问题。你知道一个例子吗?另一个选择是在genquery中使用方面。你认为可能吗?举个例子有点难,因为这里的细节可能很重要。有什么依赖关系,这是java、C++、自定义规则或其他东西吗?静态分析器需要什么信息?源文件、Java类文件、.a/.o文件等?分析器是一次需要所有信息,还是可以在单个依赖项上增量运行?是的,如果可以在规则中循环遍历目标的所有可传递依赖项,则方面听起来是一个正确的方向。我觉得这可能是个问题。你知道一个例子吗?另一个选择是在genquery中使用方面。你认为可能吗?举个例子有点难,因为这里的细节可能很重要。有什么依赖关系,这是java、C++、自定义规则或其他东西吗?静态分析器需要什么信息?源文件、Java类文件、.a/.o文件等?分析器是一次需要所有信息,还是可以在单个依赖项上增量运行?