在生成文件中使用“bazel query”
我正在使用巴泽尔与戈朗,但问题是没有去具体。我有一个通用的go目录结构:在生成文件中使用“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
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
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: