ocamlbuild huga.topの罠
OCamlには,ocamlmktopというコマンドがあって,適当なオブジェクトを事前にロードしたインタプリタを作ることができます.
let a = 100
とか書いておいたhoge.mlを用意しておいて,
$ ocamlc -c hoge.ml $ ocamlmktop -o huga hoge.cmo
とかすると./hugaができるので,
$ ./huga Objective Caml version 3.10.1 # Hoge.a;; - : int = 100
とかできて,replしたいときに幸せになれます.
ocamlbuildも当然サポートしていて,
Hoge
とか,ロードしておきたいライブラリ名を書いたhuga.mltopを書いておくと,
$ ocamlbuild huga.top
で勝手に依存関係とかを解決して作ってくれます.
が,こいつが良い感じに意味不明なわけです.
./huga.top
Objective Caml version 3.10.1
# Hoge.a;;
Unbound value Hoge.a
なんでやねん.
小一時間悩んだのですが,ocamlmktopで作ったトップレベルは,.cmoのコードを全て含んでいるわけではなくて,起動時に自動的に#loadしてくれる,というだけのもののよう.つまり,-Iとかのオプションを付けてあげないと,「カレントディレクトリには hoge.cmo なんてないよー」と諦めてしまうみたい.うん.なんつーかさ,エラーくらい表示してくれよぉ………
$ ./huga.top -I _build Objective Caml version 3.10.1 # Hoge.a;; - : int = 100
先生,もうちょっとできる子だと思ってたんだけどな……