代码之家  ›  专栏  ›  技术社区  ›  Trevor Hickey

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

  •  1
  • Trevor Hickey  · 技术社区  · 6 年前

    我有一个程序可以查看我的语言源文件,并为 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 回复  |  直到 6 年前
        1
  •  3
  •   Jin    6 年前

    我需要在bazel之外运行外部工具来重写构建文件吗?

    简而言之,是的。这就是为什么像Gazelle和JADEP这样的工具存在的原因。

    如果您的工具作为操作运行 在期间 执行阶段,则在加载和分析阶段将不存在子项。你需要运行这个工具 之前 加载/分析,可能作为 repository rule ?

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

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

    推荐文章