如何安装使用 bazel 构建的项目?

Mat*_*hew 6 bazel

我正在从事一个从 CMake 过渡到 Bazel 的项目。我们显然在讨价还价中失去的一个关键功能是安装项目的能力,以便其他(不一定是 Bazel)项目可以使用它。

AFAICT,目前没有安装项目的内置支持?!

我需要创建一个可移植的(至少必须在 Linux 和 MacOS 上工作)方式来安装项目。具体来说:

  • 我需要能够指定LICENSE需要安装的库、头文件、可执行文件和其他文件(例如)。
  • 用户需要能够指定应该安装东西的绝对前缀。
    • 我真的,真的应该能够多次执行“安装”步骤,每次给出不同的前缀,而不会让 Bazel 感到困惑(即它不能试图“记住”它已经安装的文件,或者如果它这样做了,必须了解前缀何时与上次不同)。
  • 库应该安装到正确的位置(例如lib64),或者至少应该可以让用户指定正确的 libdir。
  • 安装步骤一定不能从先前触及的任何文件的时间戳安装并没有改变。(理想情况下,Bazel 自己会处理这个问题;使用该install命令很棘手,并且存在潜在的可移植性问题。请注意上面的平台要求。)

这样做的最佳方法是什么?

Dam*_*rez 1

除非您想要执行特定的软件包(例如debrpm),否则您可能需要创建一个可执行规则来为您进行安装。

您可以创建一个规则,该规则将创建一个可执行文件(例如 shell 脚本)来为您执行安装(例如,执行校验和以检查已安装文件是否有更改,如果文件已更改,则执行文件的实际副本)。您必须使用扩展语言来执行此操作,这看起来类似于docker 规则使用增量加载器加载映像的操作

另外:我忘了说安装本身将通过使用 run 命令来运行:bazel run install如果规则install在顶级 BUILD 文件中命名。