由网友(萌酱)分享简介:我正在对Golang使用Bazel,但问题不是Go特定的。我有一个通用的GO目录结构:cmd/├── mycommand/│ ├── BUILD.bazel│ ├── main.go│ └── somefolder│ └── other.go├── othercommand/│...![dagger系列 二 续之Bazel构建java项目 官网的翻译](https://p.xsw88.cn/allimgs/daicuo/20230903/3413.png)
我正在对Golang使用Bazel,但问题不是Go特定的。我有一个通用的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
![dagger系列 二 续之Bazel构建java项目 官网的翻译](https://p.xsw88.cn/allimgs/daicuo/20230903/3413.png)
问题:如何在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)编写一个repository rule,它调用非封闭工具来动态生成构建文件可以依赖的目标。注意,您可能会遇到genquery
规则,它确实允许您对目标执行查询,但该规则在Bazel的执行阶段输出到文件,而不是在执行阶段之前发生的分析阶段可以摄取其他规则的属性的Starlark列表。
相关推荐
最新文章