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?
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