使用ocamlbuild将选项传递给camlp4

Jon*_*ark 3 ocaml ocamlbuild ocamlfind camlp4

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

<foo.ml>: package(camlp4.macro), syntax(camlp4o)
Run Code Online (Sandbox Code Playgroud)

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

camlp4o pa_macro.cmo -DFOO file.ml
Run Code Online (Sandbox Code Playgroud)

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

ygr*_*rek 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;;
Run Code Online (Sandbox Code Playgroud)

_tags:

"foo.ml": syntax(camlp4o), package(camlp4.macro), define(FOO)
Run Code Online (Sandbox Code Playgroud)