Bazel:地图设置文件->设置目标

如何解决Bazel:地图设置文件->设置目标

根据https://docs.bazel.build/versions/master/query-how-to.html#What_build_rule_contains_file_ja

fullname=$(bazel query path/to/file/bar.java)
bazel query "attr('srcs',$fullname,${fullname//:*/}:*)"

会告诉我目标bar.java属于哪个

如何获取多个文件所属的目标集?即映射设置(文件)->设置(目标)。我可以串行执行此操作,但是每次bazel调用都相当昂贵且缓慢-我想一次调用即可完成。

上下文:我想这样做(构建与几个文件有关的目标):

git diff HEAD~ | xargs bazel query "get targets for set(files)" | xargs bazel build

我觉得此功能必须已经存在,但是我找不到它。

解决方法

可以使用query,但是您也可以使用aquery作为更直接的方法。 https://docs.bazel.build/versions/master/aquery.html

BUILD

genrule(
  name = "gen1",srcs = ["a"],outs = ["gen1.out"],cmd = "echo foo > $@",)

pkg/BUILD

genrule(
  name = "gen2",srcs = ["b"],outs = ["gen2.out"],)
$ bazel aquery "inputs('a|pkg/b',...)" --include_artifacts=false --include_commandline=false
INFO: Analyzed 2 targets (6 packages loaded,10 targets configured).
INFO: Found 2 targets...
action 'Executing genrule //pkg:gen2'
  Mnemonic: Genrule
  Target: //pkg:gen2
  Configuration: k8-fastbuild
  ActionKey: 8d7d05620bfd8303aa66488e0cd6586d8e978197126cdb41c5fc8c49c81988ef

action 'Executing genrule //:gen1'
  Mnemonic: Genrule
  Target: //:gen1
  Configuration: k8-fastbuild
  ActionKey: d4c76a6b6913ce5d887829dbc00d101c1cf5b0ff5240ed13ea328c26e4b41960

INFO: Elapsed time: 0.198s
INFO: 0 processes.
INFO: Build completed successfully,0 total actions

inputs(如attr)接受正则表达式,因此您可以将文件与|“或”在一起。然后仅过滤Target:,或使用其他输出之一(--output=(proto|textproto|jsonproto)

这具有以下优点:

  1. 您不需要首先弄清楚文件的标签(因为查询中的attr对标签起作用)。
  2. aquery在分析阶段之后进行查询,因此您的结果更加准确,因为它考虑了配置(标志等)。
  3. 这将适用于任何属性,因为它查询的是所有操作的输入,其级别比规则低

另一方面,由于aquery运行加载和分析,因此可能要比query花费更长的时间,因为query仅运行加载阶段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?