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.
你会搞砸的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)