如何安装使用 bazel 构建的项目?
How do I install a project built with bazel?
我正在从事一个从 CMake 过渡到 Bazel 的项目。我们显然在讨价还价中失去的一个关键功能是安装项目的能力,以便其他(不一定是 Bazel)项目可以使用它。
AFAICT,目前没有对安装项目的内置支持?!
我需要创建一个可移植的(必须至少在 Linux 和 MacOS 上工作)的方式来安装项目。具体来说:
- 我需要能够指定需要安装的库、headers、可执行文件和其他文件(例如
LICENSE
)。
- 用户需要能够指定一个 absolute 前缀来安装东西。
- 我真的,真的应该能够多次执行 "install" 步骤,每次都给出不同的前缀,而不会混淆 Bazel(即它不能尝试 "remember" 它的文件已经安装,或者如果安装了,必须了解前缀何时与上次不同)。
- 库应该安装到正确的位置(例如
lib64
),或者至少用户应该可以指定正确的 libdir。
- 安装步骤不得触及之前安装的任何未更改文件的时间戳。 (理想情况下,Bazel 本身会处理这个问题;使用
install
命令很棘手,并且有潜在的可移植性问题。请注意上面的平台要求。)
执行此操作的最佳方法是什么?
除非你想做特定的包(例如 deb or rpm),你可能想创建一个可执行规则来为你安装。
您可以创建一个规则来创建一个可执行文件(例如 shell 脚本)为您执行安装(例如执行校验和检查已安装文件是否有更改并执行实际复制的文件,如果他们已经改变)。你必须使用扩展语言来做,这看起来类似于 docker rules does to load an image with the incremental loader
补充:我忘了说安装本身将是 运行 通过使用 运行 命令:bazel run install
如果规则在顶部被命名为 install
关卡构建文件。
我正在从事一个从 CMake 过渡到 Bazel 的项目。我们显然在讨价还价中失去的一个关键功能是安装项目的能力,以便其他(不一定是 Bazel)项目可以使用它。
AFAICT,目前没有对安装项目的内置支持?!
我需要创建一个可移植的(必须至少在 Linux 和 MacOS 上工作)的方式来安装项目。具体来说:
- 我需要能够指定需要安装的库、headers、可执行文件和其他文件(例如
LICENSE
)。 - 用户需要能够指定一个 absolute 前缀来安装东西。
- 我真的,真的应该能够多次执行 "install" 步骤,每次都给出不同的前缀,而不会混淆 Bazel(即它不能尝试 "remember" 它的文件已经安装,或者如果安装了,必须了解前缀何时与上次不同)。
- 库应该安装到正确的位置(例如
lib64
),或者至少用户应该可以指定正确的 libdir。 - 安装步骤不得触及之前安装的任何未更改文件的时间戳。 (理想情况下,Bazel 本身会处理这个问题;使用
install
命令很棘手,并且有潜在的可移植性问题。请注意上面的平台要求。)
执行此操作的最佳方法是什么?
除非你想做特定的包(例如 deb or rpm),你可能想创建一个可执行规则来为你安装。
您可以创建一个规则来创建一个可执行文件(例如 shell 脚本)为您执行安装(例如执行校验和检查已安装文件是否有更改并执行实际复制的文件,如果他们已经改变)。你必须使用扩展语言来做,这看起来类似于 docker rules does to load an image with the incremental loader
补充:我忘了说安装本身将是 运行 通过使用 运行 命令:bazel run install
如果规则在顶部被命名为 install
关卡构建文件。