omake with camlp4

pa_ooを使ったソースコードをomakeでビルドしたかったので、いろいろ試してみた。もっと賢い方法がある気がするけど、とりあえず動くよ。

ディレクトリ構造

+-camlp4-omake/
  |
  +-camlp4/
  | |
  | +-OMakefile
  | |
  | +-pa_oo.ml
  |
  +-main.ml
  |
  +-OMakefile
  |
  +-OMakeroot

main.ml

サンプルコードはこんな感じ。

let o = 
  {| x = "hello"; y = "world" |}

let _ =
  print_endline o#x

camlp4/OMakefile

camlp4/以下は普通にビルドする。

BYTE_ENABLED = true

# camlp4
OCAMLINCLUDES += -I +camlp4
OCAMLPPFLAGS  += -pp camlp4orf
OCAMLDEPFLAGS += $(OCAMLPPFLAGS)

OCamlProgram(pa_oo,pa_oo)

OMakefile

依存関係を解決する前に、pa_oo.cmoをビルドするようにしてやる。

# サブディレクトリ設定
.SUBDIRS: camlp4

# 追加ルール。依存関係を解決する前にpa_ooをビルドする
.SCANNER: scan-ocaml-%.ml: %.ml camlp4/pa_oo.cmo
	section 
		$(OCamlScanner $<)

# フラグ設定
BYTE_ENABLED = true
OCAMLPPFLAGS  += -pp 'camlp4o camlp4/pa_oo.cmo'
OCAMLDEPFLAGS += $(OCAMLPPFLAGS)

# あとは通常通り
FILES[] =
    main
.DEFAULT: $(OCamlProgram main, main)