有什么方法可以生成特定规则的deps列表吗?

时间:2018-07-04 04:42:39

标签: dependencies bazel bazel-extra-action

我有一个程序可以查看我语言的源文件,并为其构建规则的deps=[]值导出正确的值。

我正在寻找一种替代所有现有规则(看起来像这样)的方法:

build_lib(name = "foo", deps = [...])
build_lib(name = "bar", deps = [...])
build_lib(name = "baz", deps = [...])

要改为:

build_lib_new(name = "foo")
build_lib_new(name = "bar")
build_lib_new(name = "baz")

通过调用我的程序在规则内部在内部解析相同的指定dep。

理想情况下,build_lib_new只是build_lib周围的包装规则:

def derive_deps(name):
    deps = []
    # call my tool somehow?
    return deps

def build_lib_new(name):
    deps = derive_deps(name)
    build_lib(name,deps)

现在,我被卡住了。不幸的是,我认为bazel希望在分析阶段中预先了解所有依赖项。我看到它们是运行shell命令的动作,但是我相信这些动作是在生成依赖图之后发生的。

我是否需要在bazel外部运行外部工具来重写BUILD文件?

1 个答案:

答案 0 :(得分:3)

  

是否需要在bazel外部运行外部工具来重写BUILD文件?

简而言之,是的。这就是为什么存在诸如Gazelle和Jadep之类的工具的原因。

如果您的工具在执行阶段 期间作为操作运行,则在加载和分析阶段不存在dep。您需要在加载/分析之前 运行工具,也许是repository rule

  

我看到它们是运行shell命令的动作,但是我相信这些动作是在生成依赖图之后发生的。

正确。分析阶段将创建已配置的目标图,并将其还原为执行阶段的动作(shell命令,工件等)图。