Bazel 如何从生成的目标派生生成文件?

Bazel 如何从生成的目标派生生成文件?,bazel,Bazel,我们的整体式回购协议如下所示: ├── bin └── ... └── source ├── foo ├── BUILD └── ... └── bar ├── BUILD └── ... └── ... 我们有数千个构建文件,在bin目录中生成数千个目标 既然我们在bin目录中有了所有这些已编译的二进制文件,那么最好有一个方法来派生将其放在那里的构建文件 我不想手工编写一个递归解析所有构建文件的构

我们的整体式回购协议如下所示:

├── bin
    └── ...
└── source
    ├── foo
        ├── BUILD
        └── ...
    └── bar
        ├── BUILD
        └── ...
    └── ...
我们有数千个构建文件,在bin目录中生成数千个目标

既然我们在bin目录中有了所有这些已编译的二进制文件,那么最好有一个方法来派生将其放在那里的构建文件

我不想手工编写一个递归解析所有构建文件的构建规则并打印答案的工具。这是bazel查询可以实现的吗

我们的大多数构建规则都非常典型:

cc_binary(
    name="foo",
    ...
)
py_binary(
    name="bar.py",
    ...
)
最终目标将是运行类似于:

where-source ./bin/foo
./source/foo/BUILD created ./bin/foo

如果您修剪了
bin/
(我假设您使用的是
--symlink\u前缀
?),您可以使用
bazel查询

# Where did bin/foo/bar/baz get defined?
$ bazel query foo/bar/baz
//foo/bar:baz
或者,要获取有关位置的详细信息,请执行以下操作:

$ bazel query --output=location foo/bar/baz
 /home/kchodorow/gitroot/proj/source/foo/bar/BUILD:3:1: go_binary rule //foo/bar:baz
或者,要获得目标本身的定义:

$ bazel query --output=build foo/bar/baz
go_binary(
    name = "baz",
    srcs = ["//foo/bar/baz.go"],
)
有关
bazel查询
的更多示例,请参阅和该页的其余部分