[英]How to `bazel build` all targets that use a specific rule?
我們開始使用 gRPC,目前正在使用bazel
作為我們的構建工具。 在工程師對原型定義進行更新后,他們需要進行原型編譯。 由於我們存儲庫的結構,proto 編譯目標將分散在存儲庫中。
我看到的唯一選擇是使用目標命名約定,因此工程師只需要執行類似bazel build //...:compile-proto
類的操作。 是否有其他方法可以讓工程師輕松編譯所有更新的原型定義?
我不認為//...:compile-proto
是一個有效的目標模式,所以不幸的是我不確定這會起作用(不是你一定真的想依賴命名約定)。 見https://docs.bazel.build/versions/main/guide.html#specifying-targets-to-build
一種選擇是讓 bazel 為您完成所有更新。 如果您已經在進行像bazel build //...
這樣的構建來構建所有內容,那么一旦您對 proto 定義進行更新,另一個bazel build //...
應該只重建已更改的內容。
另一種選擇是使用 bazel 查詢查找所有規則:
https://docs.bazel.build/versions/main/query.html
https://docs.bazel.build/versions/main/query-how-to.html
https://docs.bazel.build/versions/main/query.html#kind
就像是:
targets=$(bazel query "kind('java_proto_library', //...)")
bazel build $targets
請注意,使用//...
的查詢將加載工作區中的每個構建文件,但不會構建任何內容。
如果您為每個標簽添加特定標簽,則可以使用--build_tag_filters 。
例如:
a_proto_library(
name = "compile-proto",
tags = ["a_proto"],
[...]
)
然后bazel build --build_tag_filters=a_proto //...
。
您還可以將規則包裝在宏中以自動添加標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.