課題
- ローカルに自作ライブラリのソースコードがある。
- ライブラリ側の変更はない仮定(安定している仮定)。
- そのライブラリを使うプログラムをローカルで作りたい。
- ライブラリのソースコードとディレクトリは別にするが、cabalプロジェクトを作る。
- ライブラリ側はlibraryディレクトリ配下、プログラムはsrc配下のようにする。
- ライブラリ側のコードも一緒にコンパイルされるので、ビルドに時間がかかる。 ⇨ なんとかしたい
解決策
- ライブラリ単独でcabalプロジェクトにして、それをプログラム側のcabalプロジェクトにインストールする。
やり方
> cabal sandbox init
などなど
name: mylibrary
version: 0.1.0.0
省略
library
exposed-modules: Foo.Bar.X
, Foo.Bar.Y
, Foo.Bar.Z
, などなど
> cabal build
- 上記のライブラリを利用するcabalプロジェクトを作成する。まずは、ライブラリを意識せずにプロジェクトを作成する。
> cabal sandbox init
いろいろ
> cabal sandbox add-source ライブラリがあるパス(のcabalファイルの親ディレクトリのパス)
executable myprogram
main-is: Main.hs
other-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses
build-depends: base >=4.9 && <4.10
その他いろいろ
, mylibrary <-- ここにライブラリ名を追加
> cabal install
- 再度やり直したいときは、取り込んだライブラリプロジェクトをいったん削除する。その後、もう一度インストールをする。
> cabal sandbox delete-source ライブラリがあるパス(のcabalファイルの親ディレクトリのパス)