Frage

Ich arbeite an einer in Haskell geschriebenen Datenflow-basierten Optimierungsbibliothek. Es ist jetzt wahrscheinlich, dass die Bibliothek in zwei Teile aufgeteilt werden muss:

  • EIN Ader Stück mit minimalen Build -Abhängigkeiten; nennen hoopl-core.

  • EIN voll Stück, nenn es hoopl, was zusätzliche Abhängigkeiten von Paketen wie einem hübschen Drucker, QuickCheck usw. haben kann.

Die Idee ist, dass der Glasgow -Haskell -Compiler nur davon abhängt hoopl-core, damit es nicht zu schwierig ist, den Compiler zu starten. Andere Compiler erhalten die zusätzlichen Leckereien in hoopl. Paket hoopl wird abhängig von hoopl-core.

Die Debian -Paket -Tools können mehrere Pakete aus einem einzigen Quellbaum erstellen. Leider Cabal hat diese Raffinesse noch nicht erreicht. Es muss jedoch andere Bibliotheks- oder Anwendungsdesigner geben, die ähnliche Probleme haben (z. B. ein Paket für eine Kernbibliothek, eine andere für eine Befehlszeilenschnittstelle, eine andere für eine GUI-Schnittstelle).

Was sind aktuelle Best Practices für das Erstellen und Verwalten mehrerer Haskell -Pakete mit Cabal?

War es hilfreich?

Lösung

Ich würde die beiden Pakete in separate Unterverzeichnisse einfügen und eine haben Makefile mit so etwas:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace

Dies sieht davon aus--inplace) und dann bauen hoopl. Sie können mehr davon mit der Makefile automatisieren.

Wie Sie wissen, haben wir, wenn wir eine ähnliche Funktionalität für GHC wollten, stattdessen unser eigenes Build-System geschrieben ;-) Ich empfehle das nicht. Technisch denke ich, es wäre möglich, aus dem GHC-Build-System die erforderlichen Teile zu extrahieren und ein wiederverwendbares Rahmen zu erstellen ...

Andere Tipps

Legen Sie die beiden Pakete in separate Unterverzeichnisse Ihres Quellvertretungsrepo und verwenden Sie zwei separate Cabal -Dateien.

Stellen Sie sicher, dass Sie den Verschiebungsbetrieb Ihres Quellensteuerungssystems beim Verschieben von Dateien verwenden, damit der Verlauf ordnungsgemäß verfolgt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top