OCamlのライブラリのビルドが通らない10の理由

  1. -whereの吐いた\r\nの\rをmakeが取り除けてない。
  2. -sharedはまともな.dllを作らないよ!ちゃんと.defファイル書いてね!dlltool使ってね!(-sharedでも奇跡的に動く時もある)flexlinkを使わないと正しくocamlインタプリタに読んでもらえないよ!他の方法で作った.dllは動いたり動かなかったり怪しいよ!
  3. Windowsのパス区切りは\です\。msys or Cygwinのツール群は/を受け入れてくれてもやっぱり全部で使えるわけじゃないです。
  4. 世の中には-lgdi32や-lwinmmが必要なAPIというものがあってですね。
  5. VC++版とMinGW版の2種類があるOCamlのせいでもある。(ここまでWindows)
  6. -cclibや-dllibに絶対パス記録するんじゃねえ。*1
  7. つか/usrとか直書きするな。Windows対応ってそれCygwinでしかテストしてないのか?Macは?
  8. $(OCAMLC)なんてやってるふりしてそれをgcamlcに書き換えるとまるでダメなMakefile。ocamlrun.aはG'Camlだとgcamlrun.aですよetc。
  9. このようにプラットホームに依存しまくったMakefileでありながら表面上は汎用的風に変数使いまくりのため非常に読みにくい。
  10. configureの何も考えられてないテストによって存在する筈のものがnoと判定されたりすると完璧。

OCamlの拡張ライブラリのmake過程なんて、そもそも*.mli/*.mlから*.cmi/*.cma/*.cmxa/*.aを作るのと、*.h/*.c/*.defからdll*.dll(so)/lib*.aを作るだけの定型作業なので、どうせ作者の環境以外でテストしないのであれば、Makefileは、凝ったビルドプロセス作られるより、べた書きされたほうが置換で対応できるためよっぽど嬉しい罠。

*1:標準添付のLablTkすらc:/tcl/libにtcl/tkを置くことを強制する……。-noautolinkを付けるか、labltk.cmxaに記録された該当オプションを潰して対処しましょう。