Bazel 查询特定类型的源文件

Bazel query for specific type of source files

有没有办法使用 bazel query 来 return 规则内特定属性的内容?我希望能够打印出具有完整 (workspace-relative) 路径的导出 headers(cc_libraryhdrs 属性)列表。

完整的故事是我想执行 bazel build 然后使用外部脚本打包工件供另一个构建系统使用,所以我需要能够获取 headers 和编译库。

对于 headers,我想我会查询标记为公开可见的 cc_library 目标,获取它们依赖项的传递闭包,然后取它们的并集hdrs 属性作为我需要复制的 header 个文件。

我可以使用以下方法获取依赖列表:

bazel query 'kind("cc_library", 
                  deps(attr("visibility",
                            "//visibility:public",
                            //... except //tools/...)
                      )
                 )'

我可以通过嵌套上面的代码得到一个完整的源文件列表:

bazel query 'kind("source file", 
                  deps(kind("cc_library", 
                            deps(attr("visibility",
                                      "//visibility:public",
                                      //... except //tools/...)
                                )
                      ))
                  )' --noimplicit_deps

但是,从源列表中不清楚哪些 header 是 hdrs 属性中的 "exported",哪些是未通过 srcs 属性导出的。有没有bazel的查询功能可以把BUILD规则的特定属性的内容挑出来?

你想要 labels function.