在构建文件中使用`bazel query` [英] Use `bazel query` inside a build file

查看:0
本文介绍了在构建文件中使用`bazel query`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在对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

问题:如何在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列表。

这篇关于在构建文件中使用`bazel query`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆