通过ocamlbuild将选项传递给camlp4

通过ocamlbuild将选项传递给camlp4,ocaml,ocamlbuild,camlp4,ocamlfind,Ocaml,Ocamlbuild,Camlp4,Ocamlfind,我正在使用ocamlbuild对ocamlfind的本机支持来简化项目的构建过程。 文件foo.ml依赖于使用camlp4宏的条件编译。\u标签文件包含以下内容: <foo.ml>: package(camlp4.macro), syntax(camlp4o) 但是在使用ocamlbuild+ocamlfind时,如何将-DFOO变量传递给camlp4?我觉得应该有一个简单的命令行选项,而不是必须搞乱myocamlbuild.ml你要搞乱myocamlbuild.ml。没有插入-p

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

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

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

你要搞乱
myocamlbuild.ml
。没有插入-ppopt的内置规则,因此它相当详细,但很简单

build.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;;
\u标签中

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

请注意,如果将
-pp
-ppopt
传递给ocamlfind,则它似乎忽略了
-ppopt
的值。因此,我必须从我的ocamlbuild
\u标签
文件中删除“camlp4of”标签,并在我的
myocamlbuild.ml
文件中设置
-pp
"foo.ml": syntax(camlp4o), package(camlp4.macro), define(FOO)