Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependencies 有没有办法为特定规则生成deps列表?_Dependencies_Bazel_Bazel Extra Action - Fatal编程技术网

Dependencies 有没有办法为特定规则生成deps列表?

Dependencies 有没有办法为特定规则生成deps列表?,dependencies,bazel,bazel-extra-action,Dependencies,Bazel,Bazel Extra Action,我有一个程序,可以查看我的语言的源文件,并为其构建规则的deps=[]值派生正确的值 我正在寻找一种方法来替换我现有的所有规则(如下所示): 改为: build_lib_new(name = "foo") build_lib_new(name = "bar") build_lib_new(name = "baz") 通过调用我的程序在规则中内部解析相同的指定DEP 理想情况下,build\u lib\u new只是build\u lib的包装规则: def derive_deps(name):

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

我正在寻找一种方法来替换我现有的所有规则(如下所示):

改为:

build_lib_new(name = "foo")
build_lib_new(name = "bar")
build_lib_new(name = "baz")
通过调用我的程序在规则中内部解析相同的指定DEP

理想情况下,
build\u lib\u new
只是
build\u 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
文件

我是否必须在bazel之外运行外部工具来重写构建文件

简言之,是的。这就是Gazelle和Jadep等工具存在的原因

如果您的工具在执行阶段作为操作运行,那么在加载和分析阶段DEP将不存在。您需要在加载/分析之前运行该工具,可能是作为

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


对。分析阶段创建配置的目标图,并将其具体化为执行阶段的操作(shell命令、工件等)图。

Ok,谢谢确认。Gazelle、Jadep和存储库规则听起来很有前途。它包含用于解析/编辑/打印生成文件的函数。我们将随着时间的推移扩展这些特性,以便更容易地构建此类工具。
def derive_deps(name):
    deps = []
    # call my tool somehow?
    return deps

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