2017-06-28 22 views
2

当社のモノリスレポは次のようになります。生成されたターゲットからBUILDファイルを派生させるにはどうすればよいですか?

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

私たちは、binディレクトリにターゲットの数千人を生産BUILDファイルの数千を持っています。

これらのコンパイルされたバイナリはすべてbinディレクトリにありますので、どのBUILDファイルをそこに置くかを派生させる方法があるといいでしょう。

私はBUILDファイルのビルドルールをすべて再帰的に解析し、その答えを出力するツールを手書きしたくありません。これは、バゼルのクエリで達成できるものですか?

私たちのビルドルールのほとんどは、かなり典型的なものである:あなたがbin/を切り落とす場合は(私はあなたが使用していると仮定し

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

答えて

1

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

最終的な目標は次のように実行することです?--symlink_prefix)、あなたはbazel query使用することができます。

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

O

$ bazel query --output=location foo/bar/baz 
/home/kchodorow/gitroot/proj/source/foo/bar/BUILD:3:1: go_binary rule //foo/bar:baz 

あるいは、ターゲット自体の定義を取得するには:R、場所に関する詳細な情報を取得する

$ 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?と、そのページの残りの部分を参照してください。

関連する問題