2017-06-28 42 views
2

我们的整体回购看起来是这样的:如何从生成的目标中派生BUILD文件?

├── bin 
    └── ... 
└── source 
    ├── foo 
     ├── BUILD 
     └── ... 
    └── bar 
     ├── BUILD 
     └── ... 
    └── ... 

我们有成千上万的生产数以千计的目标进入bin目录下生成文件。

现在我们已经将所有这些已编译的二进制文件放在bin目录中,最好有一个派生哪个BUILD文件的方法。

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

的大多数我们的构建规则是相当典型:

cc_binary(
    name="foo", 
    ... 
) 
py_binary(
    name="bar.py", 
    ... 
) 

的最终目标将是运行是这样的:如果你剪掉bin/

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

回答

1

(我假设你使用?--symlink_prefix),你可以使用bazel query

# Where did bin/foo/bar/baz get defined? 
$ bazel query foo/bar/baz 
//foo/bar:baz 

Ø R,获得详细的信息有关的位置:

$ 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"], 
) 

What build rule contains file src/main/java/com/example/cache/LRUCache.java as a source?和页面为bazel query更多的例子休息。

相关问题