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

6
我正在处理一个从CMake转移到Bazel的项目。我们显然在这个过程中失去了重要的功能,即安装项目,以便它可以被其他(不一定是Bazel)项目使用。
据我所知,目前没有内置的支持来安装项目?!
我需要创建一种可移植的方式(必须至少适用于Linux和MacOS)来安装该项目。具体而言:
- 我需要能够指定需要安装的库、头文件、可执行文件和其他文件(例如 `LICENSE`)。 - 用户需要能够指定绝对前缀来安装东西。 - 我真的非常需要能够多次执行 "install" 步骤,并每次给出不同的前缀,而不会让Bazel感到困惑(即它不能尝试“记住”它已经安装了哪些文件,或者如果它这样做了,那么必须在前缀与上次不同时理解)。 - 库应安装在正确的位置(例如 `lib64`),或者用户应该能够指定正确的libdir。 - 安装步骤绝不会触及任何未更改的先前安装文件的时间戳。(理想情况下,Bazel本身将处理此问题;使用`install`命令很棘手,并且具有潜在的可移植性问题。请注意平台要求以上。)
最佳方法是什么?
1个回答

1

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

您可以创建一个规则,该规则将创建一个可执行文件(例如 shell 脚本),该文件将为您执行安装操作(例如执行校验和以检查已安装文件是否更改,并在文件发生更改时执行实际文件复制)。您必须使用扩展语言来完成这项操作,它类似于 docker rules does to load an image 的扩展语言,使用 incremental loader

补充:我忘记说了,如果规则在顶级 BUILD 文件中命名为 install,则安装本身将通过运行命令 bazel run install 来运行。


虽然我在理解这个答案时遇到了一些困难,但回过头来看,我发现这基本上就是我最终做的事情。请参阅我的PR以了解我最终的结果。(但也请检查是否有进一步的更改,因为到目前为止,我已经发现了至少一个错误...)我的“可执行文件”是一个由模板生成的Python脚本,我将安装操作注入其中。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接