2017-04-21 4 views
2

Ich arbeite an einem Projekt, das von CMake zu Bazel übergeht. Ein kritisches Merkmal, das wir offensichtlich verlieren, ist die Fähigkeit, das Projekt zu installieren, so dass es von anderen (nicht notwendigerweise Bazel) Projekten verwendet werden kann.Wie installiere ich ein Projekt mit Bazel?

AFAICT, es gibt derzeit keine integrierte Unterstützung für die Installation eines Projekts ?!

Ich muss ein tragbares erstellen (muss mindestens auf Linux und MacOS arbeiten), um das Projekt zu installieren. Im Einzelnen:

  • Ich muss in der Lage, Bibliotheken, Header, ausführbare Dateien angeben und andere Dateien (z LICENSE), die installiert werden müssen.
  • Der Benutzer muss in der Lage sein, einen absoluten Präfix anzugeben, wo Dinge installiert werden sollen.
  • Ich wirklich, wirklich sollte in der Lage sein, den "installieren" Schritt mehr als einmal auszuführen, verschiedene Präfixe jedes Mal geben, ohne Bazel verwirrt (dh es muss nicht versuchen, "sich zu erinnern", welche Dateien es bereits installiert, oder wenn ja, muss man verstehen, wenn sich das Präfix vom letzten unterscheidet.
  • Bibliotheken sollten an der richtigen Stelle installiert werden (z. B. lib64), oder es sollte dem Benutzer zumindest möglich sein, das richtige libdir anzugeben.
  • Der Installationsschritt MUSS NICHT den Zeitstempel auf irgendeine Datei von einer vorherigen Installation berühren, die sich nicht geändert hat. (Idealerweise Bazel selbst würde dies zu umgehen, indem der install Befehl heikel ist und hat das Potenzial, Portabilitätsprobleme Hinweis Plattformanforderungen vor..)

Was ist der beste Weg, um dies zu tun gehen?

Antwort

0

Sofern Sie nicht ein bestimmtes Paket erstellen möchten (z. B. deb oder rpm), möchten Sie wahrscheinlich eine ausführbare Regel erstellen, die die Installation für Sie ausführt.

Sie können eine Regel erstellen, die eine ausführbare Datei (z. B. ein Shell-Skript) erstellt, die die Installation für Sie vornimmt (z. B. Prüfsummen, um zu prüfen, ob Änderungen an der installierten Datei vorgenommen werden und ob die tatsächliche Kopie der Dateien erfolgt haben sich geändert). Sie würden die Erweiterungssprache verwenden, zu tun haben, das würde aussehen, ähnlich wie die docker rules does to load an image mit dem incremental loader

Zusatz: Ich habe vergessen zu sagen, dass die Installation selbst unter Verwendung des Fahrbefehl ausgeführt werden würde: bazel run install wenn die Regel benannte install in der obersten BUILD-Datei.

+0

Während ich einige Probleme hatte, dieser Antwort zu folgen, sehe ich im Rückblick, dass dies im Grunde das ist, was ich letztendlich getan habe. Siehe [meine PR] (https://github.com/RobotLocomotion/drake/pull/6072) für das, womit ich letztendlich gelandet bin. (Aber auch nach weiteren Änderungen suchen, da ich bisher mindestens einen Bug gefunden habe ...) Meine "ausführbare Datei" ist ein Python-Skript, das ich aus einer Vorlage erzeuge, in die ich die Installationsaktionen einschleuse. – Matthew

Verwandte Themen