使用ocamlbuild将选项传递给camlp4

时间:2012-08-08 14:09:29

标签: ocaml ocamlbuild camlp4 ocamlfind

我正在使用ocamlbuild对ocamlfind的本机支持来简化项目的构建过程。 文件foo.ml依赖于使用camlp4宏的条件编译。 _tags文件包含以下内容:

<foo.ml>: package(camlp4.macro), syntax(camlp4o)

这很好用,但我无法将选项传递给camlp4。不使用ocamlbuild + ocamlfind自动化,命令行将是这样的:

camlp4o pa_macro.cmo -DFOO file.ml

但是在使用ocamlbuild + ocamlfind时如何将-DFOO变量传递给camlp4?我觉得应该有一个简单的命令行选项,而不必混淆myocamlbuild.ml

1 个答案:

答案 0 :(得分:5)

你会惹恼myocamlbuild.ml。插入-ppopt没有内置规则,因此它相当冗长,但很简单。

myocamlbuild.ml

open Ocamlbuild_plugin ;;
dispatch begin function
| After_rules ->
pflag ["ocaml";"compile";] "define" (fun s -> S [A"-ppopt"; A ("-D"^s)]);
pflag ["ocaml";"ocamldep";] "define" (fun s -> S [A"-ppopt"; A ("-D"^s)])
| _ -> ()
end;;

_tags

"foo.ml": syntax(camlp4o), package(camlp4.macro), define(FOO)