我们的monolith repo看起来像这样:
├── bin
└── ...
└── source
├── foo
├── BUILD
└── ...
└── bar
├── BUILD
└── ...
└── ...
我们有数以千计的BUILD文件在bin目录中生成数千个目标。
既然我们已经在bin目录中拥有了所有这些已编译的二进制文件,那么有一个方法可以派生出哪个BUILD文件放在那里。
我不想手工编写一个递归解析所有BUILD文件构建规则并打印答案的工具。这是用bazel查询可以实现的吗?
我们的大多数构建规则都非常典型:
cc_binary(
name="foo",
...
)
py_binary(
name="bar.py",
...
)
最终目标是运行类似:
where-source ./bin/foo
./source/foo/BUILD created ./bin/foo
答案 0 :(得分:2)
如果您删除了bin/
(我假设您正在使用--symlink_prefix
?),则可以使用bazel query
:
# 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 query
的更多示例,请参阅What build rule contains file src/main/java/com/example/cache/LRUCache.java
as a source?以及该页面的其余部分。