我正在使用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
。
答案 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)