如何将所有二进制文件打包到 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_bin
和 hello_lib
目标。这将以与上面 mypkg
相同的方式首先聚合到 hello_pkg
中,然后又将在 mypkg
.
中使用
在我的单声道存储库的层次结构中散布着过多的 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_bin
和 hello_lib
目标。这将以与上面 mypkg
相同的方式首先聚合到 hello_pkg
中,然后又将在 mypkg
.