有没有办法为特定规则生成 deps 列表?
Is there any way to generate the deps list for particular rules?
我有一个程序可以查看我的语言的源文件,并为其构建规则的 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
文件?
Do I have to run the external tool outside of bazel to rewrite BUILD files?
简而言之,是的。这就是 Gazelle 和 Jadep 等工具存在的原因。
如果您的工具 运行 在 执行阶段作为操作 ,那么在加载和分析阶段将不存在 deps。在 loading/analysis 之前,您需要 运行 工具 ,也许作为 repository rule?
I see that their are actions to run shell commands, but I believe those happen after the dependency graph is made.
正确。分析阶段创建配置的目标图,并将其具体化为执行阶段的操作(shell 命令、工件等)图。
我有一个程序可以查看我的语言的源文件,并为其构建规则的 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
文件?
Do I have to run the external tool outside of bazel to rewrite BUILD files?
简而言之,是的。这就是 Gazelle 和 Jadep 等工具存在的原因。
如果您的工具 运行 在 执行阶段作为操作 ,那么在加载和分析阶段将不存在 deps。在 loading/analysis 之前,您需要 运行 工具 ,也许作为 repository rule?
I see that their are actions to run shell commands, but I believe those happen after the dependency graph is made.
正确。分析阶段创建配置的目标图,并将其具体化为执行阶段的操作(shell 命令、工件等)图。