簡體   English   中英

如何從 Bazel 規則查詢兄弟規則

[英]How to query sibling rules from a Bazel rule

我希望能夠在 Bazel BUILD 文件中執行以下操作:

alpha(
  name = "hello world",
  color = "blue"
)

beta(
  name = "hello again"
)

其中alphabeta是自定義規則。 我希望beta能夠訪問alpha規則的color屬性,而無需添加 label 屬性 在 Bazel 查詢中,我可以這樣做:

bazel query 'kind(beta, siblings(kind(alpha, //...)))'

這給了我與alpha並排的beta 我能以某種方式從beta規則的實施 function 中實現相同的目標嗎?

def _beta_rule_impl(ctx):
  # This does not exist, I wish it did: ctx.siblings(kind='alpha')

我已經看到這是用這樣的 label 完成的

beta(
  name = "hello again",
  alpha_link = ":hello world" # explicitly linking
)

但我覺得這有點冗長,特別是因為有兄弟查詢支持。

問題的表述方式,答案是否定的。 這不可能。

Bazel 的設計理念是明確目標依賴關系。 提供者機制旨在在分析階段提供對依賴圖信息的訪問。

很難說實際用例是什么。 使用 方面可能是答案。

在我的場景中,我試圖在繼續之前獲得一個genrule來調用test規則:

genrule(
    name = "generate_buf_image",
    srcs = [":protos", "cookie"],
    outs = ["buf-image.json"],
    cmd = "$(location //third_party/buf:cas_buf_image) //example-grpc/proto/v1:proto_backwards_compatibility_check $(SRCS) >$(OUTS)",
    tools = [
        "//third_party/buf:cas_buf_image",
        "@buf",
    ],
)

如果cas_buf_image.shls -l "example-grpc/proto/v1" >&2 ,它顯示:

… cookie -> …/example-grpc/proto/v1/cookie
… example.proto -> …/example-grpc/proto/v1/example.proto

IOW,檢查example-grpc/proto/v1/cookie鏈接到什么並cd到它的目錄然后執行git命令應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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