Binary 如何在bazel中打包所有二进制文件?

Binary 如何在bazel中打包所有二进制文件?,binary,directory,packaging,bazel,Binary,Directory,Packaging,Bazel,在我的mono repo的层次结构中,分散着大量的构建文件。 其中一些文件包含cc\u二进制规则。 我知道它们都内置在bazel bin中,但我希望能够轻松访问它们。 例如,如何将它们打包并放入~/.bin/ 我明白了,但我不清楚如何编写一个规则来捕获每个程序并将它们打包在一起。这可能不是最优雅的解决方案(另外我希望我得到了这个问题),但这就是我们如何将每个二进制文件打包到自己的bazel包中的方法 cc_binary( name = "hello" ... ) load("@

在我的mono repo的层次结构中,分散着大量的构建文件。
其中一些文件包含
cc\u二进制
规则。
我知道它们都内置在
bazel bin
中,但我希望能够轻松访问它们。
例如,如何将它们打包并放入
~/.bin/


我明白了,但我不清楚如何编写一个规则来捕获每个程序并将它们打包在一起。

这可能不是最优雅的解决方案(另外我希望我得到了这个问题),但这就是我们如何将每个二进制文件打包到自己的bazel包中的方法

cc_binary(
    name = "hello"
    ...
)

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
pkg_tar(
    name = "hello_pkg",
    srcs = [":hello"],
    mode = "0755",
    package_dir = "/usr/bin",
)
然后我们将所有这些数据收集到project root中的一个总体tarball/包中:

pkg_tar(
    name = "mypkg",
    extension = "tar.gz",
    deps = [
        "//hello:hello_pkg",
        ...
    ],
)

有时,我们实际上会有多个这样的规则供hello收集,例如
bin
下的可执行文件和
lib
中的库,中间对象是
hello\u bin
hello\u lib
目标。它将以与上面的
mypkg
相同的方式首先聚合为
hello\u pkg
,然后在
mypkg
中使用,这可能不是最优雅的解决方案(另外,我希望我得到了这个问题),但这是我们通过包装/“tarring”实现的方式每个二进制文件都有自己的bazel包/
BUILD
文件:

cc_binary(
    name = "hello"
    ...
)

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
pkg_tar(
    name = "hello_pkg",
    srcs = [":hello"],
    mode = "0755",
    package_dir = "/usr/bin",
)
然后我们将所有这些数据收集到project root中的一个总体tarball/包中:

pkg_tar(
    name = "mypkg",
    extension = "tar.gz",
    deps = [
        "//hello:hello_pkg",
        ...
    ],
)

有时,我们实际上会有多个这样的规则供hello收集,例如
bin
下的可执行文件和
lib
中的库,中间对象是
hello\u bin
hello\u lib
目标。这将以与上面的
mypkg
相同的方式首先聚合为
hello\u pkg
,然后依次用于
mypkg

谢谢,这可能是最好的方法。这使得快速迭代很难实现。我希望更改代码,重建,然后从repo外部运行更新的系统工具。至少对于迭代,我必须弄清楚如何有效地使用
bazel-run
。实际上,对于这种用例,
bazel-run
很可能就是您想要的。尽管除非你对布局做了很多修改,否则这大部分都是一次性的工作,是的,还有一些(取决于项目)额外的机器时间+存储。谢谢,这可能是最好的方法。这使得快速迭代很难实现。我希望更改代码,重建,然后从repo外部运行更新的系统工具。至少对于迭代,我必须弄清楚如何有效地使用
bazel-run
。实际上,对于这种用例,
bazel-run
很可能就是您想要的。尽管除非您对布局进行大量更改,否则这将主要是一次性的工作,并且是一些(取决于项目)额外的机器时间+存储。