cabal-install "v2" ビルド メモ
しばらく前からstackばかり使っていたのでCabalにはとんと疎くなってきたが、cabal-installの"v2"系のビルドはかなり使いやすくなっているとのことで、使い方をチェックしてみた。
stackの代わりにcabalを使うメリットとしては、以下が挙げられると思う。
- stackageに上がってパッケージや上がってないバージョンを自由に使える。
- リリースされたばかりの最新のGHCを使える。
- haddockドキュメントをビルドしてhackageにアップロードできる (hackageのUploadページの下部を参照)
cabal-installのドキュメントはこちら: Welcome to the Cabal User Guide — Cabal 3.4.0.0 User's Guide
ざっくり言うと、
cabal.project
ファイルに開発対象のcabalプロジェクトリストを書く。cabal v2-build
コマンドでビルド。- ビルドプランはプロジェクトごとに独立であり、グローバルな状態に依存しない。
- 共有可能なexternal packageについてはグローバルにキャッシュされるので、基本的に余計なリビルドは発生しない。
- 開発対象のlocal packageはプロジェクトごとにビルド状態保存される。
cabal v2-configure
は必須ではない。- 開発用にビルドオプションを記録しておきたいときに使う。
v2-configure
を実行すると、与えたビルドオプションをもとにcabal.project.local
ファイルを生成する。
cabal v2-freeze
コマンドでその場のビルドプランをcabal.project.freeze
ファイルとして書き出す。cabal.project.freeze
はconstraints
スタンザを含む。これはビルドプランのソルバーに対する制約条件として機能する。- stack で管理されたプロジェクトを cabal でビルドするために にあるように、stackageサイトからsnapshotに対応するconstraintsファイルを取得できる。(例えば https://www.stackage.org/lts-8.23/cabal.config )