在生成文件中使用“bazel query”

在生成文件中使用“bazel query”,bazel,Bazel,我正在使用巴泽尔与戈朗,但问题是没有去具体。我有一个通用的go目录结构: cmd/ ├── mycommand/ │ ├── BUILD.bazel │ ├── main.go │ └── somefolder │ └── other.go ├── othercommand/ │ ├── BUILD.bazel │ └── main.go pkg/ └── mypackage/ ├── BUILD.bazel └── init.go BUILD.b

我正在使用巴泽尔与戈朗,但问题是没有去具体。我有一个通用的go目录结构:

cmd/
├── mycommand/
│   ├── BUILD.bazel
│   ├── main.go
│   └── somefolder
│       └── other.go
├── othercommand/
│   ├── BUILD.bazel
│   └── main.go
pkg/
└── mypackage/
    ├── BUILD.bazel
    └── init.go
BUILD.bazel
WORKSPACE
。。。我想引用
cmd
文件夹下的目标。我有一个bazel查询,它将为我提供这些目标的列表:

bazel query 'kind("go_binary", deps(//cmd/...))'
  • //cmd/mycommand:mycommand
  • //cmd/othercommand:othercommand
问题:如何将此查询包含在BUILD.bazel文件中,类似于以下内容:

pkg_tar(
    name = "release",
    srcs = kind("go_binary", deps(//cmd/...)),
    mode = "0644",
)
…这给了

ERROR: /some/path/BUILD.bazel:10:12: name 'kind' is not defined
ERROR: /some/path/BUILD.bazel:10:30: name 'deps' is not defined

构建目标需要在构建文件中静态引用,因此将查询作为规则属性的输入嵌入不起作用

但是,有两种方法可以动态生成要在生成文件中静态使用的目标:

1) 在运行Bazel之前,运行生成生成生成文件的工具。rules_go的瞪羚就是一个很好的例子

2) 编写一个调用非密封工具来动态生成生成文件所依赖的目标的


请注意,您可能会遇到该规则,它确实允许您对目标执行查询,但该规则在Bazel的执行阶段输出到一个文件,而不是一个Starlark列表,该列表可以在分析阶段(执行阶段之前)吸收到其他规则的属性中

构建目标需要在构建文件中静态引用,因此将查询作为规则属性的输入嵌入不起作用

但是,有两种方法可以动态生成要在生成文件中静态使用的目标:

1) 在运行Bazel之前,运行生成生成生成文件的工具。rules_go的瞪羚就是一个很好的例子

2) 编写一个调用非密封工具来动态生成生成文件所依赖的目标的


请注意,您可能会遇到该规则,它确实允许您对目标执行查询,但该规则在Bazel的执行阶段输出到一个文件,而不是一个Starlark列表,该列表可以在分析阶段(执行阶段之前)吸收到其他规则的属性中

好像是
bazel查询…|awk
是普遍接受的解决方案:facepalm:看起来像是
bazel查询…|awk
是公认的解决方案:facepalm: