如何查找bazel目标生成的可执行文件
我试图如何查找bazel目标生成的可执行文件,bazel,Bazel,我试图bazel运行//foo,而不获取构建步骤中输出的所有信息行。跟踪此功能请求,但尚未实现。为了实现这一点并使其独立于平台,我一直在尝试找到一个bazel query/aquery/cquery命令,该命令告诉我bazel目标生成的可执行文件(基本上是bazel run//foo应该运行的任何东西) 我的工作是编写一个bash脚本,调用buildout=$(bazel build//$target--color=yes 2>&1),然后在build命令成功退出时直接运行可执行文件。我已经对各
bazel运行//foo
,而不获取构建步骤中输出的所有信息行。跟踪此功能请求,但尚未实现。为了实现这一点并使其独立于平台,我一直在尝试找到一个bazel query/aquery/cquery
命令,该命令告诉我bazel目标生成的可执行文件(基本上是bazel run//foo
应该运行的任何东西)
我的工作是编写一个bash脚本,调用buildout=$(bazel build//$target--color=yes 2>&1)
,然后在build命令成功退出时直接运行可执行文件。我已经对各种查询命令进行了大量的研究,但是还没有找到一种通用的方法来实现这一点。我得到的最接近的结果是在bazel aquery//foo
的输出上运行正则表达式来查找输出行
是否有更好的工具用于此作业或特定的查询命令可以告诉我这一点
谢谢 这不是回答您的问题,而是修复您原来的问题:
bazel run --experimental_ui_limit_console_output=1 //:hello
至于您的问题,二进制文件的位置(只要您没有自定义工具链)将取决于目标的名称
因此,
//:hello
将在bazel-bin/hello
中结束,/a/long:hello
将在bazel-bin/a/long/hello
中结束,依此类推……在构建之后,您的可执行文件将在bazel-bin目录中。直接从那里运行可执行文件会起作用吗?例如,在bash$/bazel-bin/fooso中不幸的是,它的确切位置取决于平台。在我的机器上是bazel bin/foo/bar/tool/linux_amd64_stripped/tool,在mac上是darwin_amd64_stripped。我的脚本的当前版本几乎与您描述的完全相同,我可以调整它以尝试搜索正确的依赖于系统的文件夹,但我真的希望这样做要简单、简洁地识别它。我担心的是,文档说这会将控制台输出限制为一个字节,所以如果你要运行bazel--experimental_ui_limit_console_output=1//:hello>some_file.txt的话,它的开头会有一个额外的字符。好吧,这通常是一个新行,但我不认为这是有保证的。