如何将所有二进制文件打包到 bazel 中?

How do I package all of my binaries in bazel?

在我的单声道存储库的层次结构中散布着过多的 BUILD 文件。
其中一些文件包含 cc_binary 条规则。
我知道它们都内置在 bazel-bin 中,但我想轻松访问它们。
我怎样才能把它们打包起来,然后把它们都放到~/.bin/里呢?

我看到 packaging rules,但我不清楚如何编写捕获每个程序并将它们打包在一起的规则。

这可能不是最优雅的解决方案(而且我希望我能回答这个问题),但这是我们通过打包/"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",
)

然后我们将所有这些收集到一个整体 tarball/package 项目根目录中:

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

有时我们实际上有多个这样的规则供 hello 收集,例如 bin 下的可执行文件和 lib 中的库以及中间 hello_binhello_lib 目标。这将以与上面 mypkg 相同的方式首先聚合到 hello_pkg 中,然后又将在 mypkg.

中使用