簡體   English   中英

如何“bazel build”所有使用特定規則的目標?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM