2017-04-21 10 views
2

私はCMakeからBazelに移行しているプロジェクトに取り組んでいます。私たちが明らかに契約で失っている重要な機能の1つは、他の(必ずしもBazelではない)プロジェクトで使用できるようにプロジェクトをインストールできることです。bazelでビルドされたプロジェクトをインストールするにはどうすればよいですか?

AFAICTでは、現在、プロジェクトをインストールするための組み込みサポートはありません。

プロジェクトをインストールするには、ポータブル(少なくともLinuxとMacOSで動作する必要があります)の方法を作成する必要があります。具体的には、

  • インストールが必要なライブラリ、ヘッダー、実行ファイル、その他のファイル(例:LICENSE)を指定する必要があります。
  • ユーザーはアブソリュート接頭辞を指定してインストールする必要があります。
    • Bazelが混乱することなく、毎回違う接頭語を付けて、実際にインストールを実行することができるはずです(つまり、インストール済みのファイルを "覚えよう"そうであれば、接頭辞が前回と異なる時を理解しなければならない)。
  • ライブラリを適切な場所(たとえばlib64)にインストールするか、ユーザーが正しいlibdirを指定できるようにする必要があります。
  • インストール手順は、変更されていない以前のインストールのファイルのタイムスタンプに触れてはいけません。 (理想的には、Bazel自身がこれを処理するだろう。。。installコマンドを使用すると、トリッキーで、潜在的な移植性の問題を持っているノートプラットフォーム要件を、上記)

これを行うことについて移動する最良の方法は何ですか?

答えて

0

特定のパッケージ(例:debまたはrpm)を実行しない限り、インストールを実行する実行可能ルールを作成することをお勧めします。

インストールを実行する実行ファイル(シェルスクリプトなど)を作成するルールを作成できます(たとえば、チェックサムを使用してインストール済みファイルが変更されているかどうかを確認し、変更されました)。あなたはincremental loader

追加で何docker rules does to load an imageのようになりますこと、やって拡張言語を使用する必要があります:ルールがある場合bazel run install:私は自分自身をインストールするには、runコマンドを使用して実行されることを言うのを忘れていましたトップレベルのBUILDファイルにinstallという名前が付けられています。

+0

私はこの答えに続いていくつかの問題を抱えていましたが、これを見ると、これは基本的に私がやったことです。私が最後にしたことについては[my PR](https://github.com/RobotLocomotion/drake/pull/6072)を参照してください。 (しかし、それ以上の変更点を確認してください。これまでに少なくとも1つのバグが見つかりました...) 私の "実行可能ファイル"は、私がインストールアクションを挿入するテンプレートから生成するPythonスクリプトです。 – Matthew

関連する問題