【发布时间】:2018-07-05 03:47:14
【问题描述】:
我有一个程序可以查看我的语言的源文件,并为其构建规则的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")
通过调用我的程序,在规则内部解析了相同的指定 deps。
理想情况下,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 文件?
【问题讨论】:
-
如果要写这样的工具,看github.com/bazelbuild/buildtools。它包含用于解析/编辑/打印 BUILD 文件的功能。我们将随着时间的推移扩展这些功能,以便更轻松地构建此类工具。
标签: dependencies bazel bazel-extra-action