2017-04-21 65 views
2

我正在从CMake过渡到Bazel的项目。我们显然在讨价还价中丧失的一个关键特征是安装该项目的能力,以便其可以被其他(不一定是Bazel)项目使用。如何安装使用bazel构建的项目?

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

我需要创建一个便携式(至少在Linux和MacOS上工作)的方式来安装该项目。特别是:

  • 我需要能够指定需要安装的库,头文件,可执行文件和其他文件(例如LICENSE)。
  • 用户需要能够指定一个绝对前缀应该安装的东西。
    • 我真的,真的应该能够执行“安装”步骤不止一次,给予不同的前缀,每次,没有巴泽勒感到困惑(即:不能尝试“记住”哪些文件已安装,或如果是这样,必须了解何时前缀与上次不同)。
  • 库应该安装在正确的位置(例如lib64),或者至少应该可以让用户指定正确的libdir。
  • 安装步骤禁止触摸先前安装中未更改的任何文件的时间戳。 (理想情况下,巴泽尔本身会处理这一点;使用install命令是棘手的,有潜力的便携性问题,注意平台的要求,上面。)

什么是去这样做的最佳方式?

回答

0

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

您可以创建一个规则来创建一个为您执行安装的可执行文件(例如,shell脚本)(例如,执行校验和以检查安装文件是否发生更改,如果它们是文件的实际副本已改变)。你将不得不使用扩展语言来做,这将类似于什么docker rules does to load an imageincremental loader

加法:我忘了说,在自行安装将使用run命令运行:bazel run install如果规则在顶层BUILD文件中命名为install

+0

虽然我在回答这个问题后遇到了一些麻烦,但回过头来看,这基本上是我最终做的。看到[我的PR](https://github.com/RobotLocomotion/drake/pull/6072)为我结束了。 (但也请检查进一步的更改,因为我发现迄今为止至少有一个错误...) 我的“可执行文件”是一个Python脚本,我通过模板生成了一个Python脚本,其中注入了安装操作。 – Matthew

相关问题