2017-04-21 41 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

相關問題