5

Haskellで書かれたデータフローベースの最適化ライブラリに取り組んでいます。ライブラリを2つに分割する必要があるようです。

  • ビルドの依存関係が最小限のコアピースそれを呼び出しますhoopl-core

  • 完全なピースと呼びますhoopl。これは、prettyprinter、QuickCheckなどのパッケージに追加の依存関係がある場合があります。

Glasgow Haskellコンパイラはにのみ依存するhoopl-coreため、コンパイラをブートストラップするのはそれほど難しくありません。他のコンパイラは、で追加の機能を取得しhooplます。パッケージhooplはに依存しhoopl-coreます。

Debianパッケージツールは、単一のソースツリーから複数のパッケージを構築できます。残念ながら、Cabalはまだそのレベルの洗練度に達していません。ただし、同様の問題を抱えている他のライブラリまたはアプリケーションの設計者がいる必要があります(たとえば、コアライブラリ用のパッケージ、コマンドラインインターフェイス用のパッケージ、GUIインターフェイス用のパッケージなど)。

Cabalを使用して複数の関連するHaskellパッケージを構築および管理するための現在のベストプラクティスは何ですか?

4

2 に答える 2

3

2つのパッケージを別々のサブディレクトリに配置し、次のMakefileようなものを使用します。

.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

これは、最初にhoopl-coreをビルドして登録し(--inplace)、次にビルドすることでプロセスをブートストラップしたことを前提としていますhoopl。Makefileを使用して、これをさらに自動化できます。

ご存知のように、GHCに同様の機能が必要な場合は、代わりに独自のビルドシステムを作成しました;-)お勧めしません。技術的には、GHCビルドシステムから必要な部分を抽出して、再利用可能なフレームワークを作成することは可能だと思いますが...

于 2010-07-04T15:39:18.297 に答える
2

2つのパッケージをソース管理リポジトリの別々のサブディレクトリに配置し、2つの別々のcabalファイルを使用します。

ファイルを移動するときは、ソース管理システムの移動操作を使用して、履歴を適切に追跡するようにしてください。

于 2010-04-13T07:44:47.423 に答える