如何在 bazel 中查询规则的属性?

How can I query the attribute of a rule in bazel?

如果我有

cc_binary(
    name = "stooges",
    srcs = [ "larry.cc", "curly.cc", "moe.cc" ],
)

是否有一个 bazel 查询将 return "larry.cc", "curly.cc", "moe.cc" ?

目前我唯一能想到的就是

$ bazel query --output=build //:stooges | perl -nwle 'print  if /srcs\s*=\s*\[([^]]*)\]/'

获取 srcs 属性中列出的所有标签:

bazel query 'labels(srcs,//your_package:your_target)'

你的情况bazel query 'labels(srcs,//:stooges)'

应该return:

//:larry.cc 
//:curly.cc
//:moe.cc

如果您想要所有 hdrssrcs 标签:

bazel query 'labels(srcs,//your_package:your_target) union labels(hdrs,//your_package:your_target)'

您还可以使用 Bazel Aspects 来查询源文件。更多详情 here.