使用ocamlbuild为camlp4传递选项

3

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

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

这样做效果很好,但是我在传递选项给camlp4时遇到了麻烦。如果不使用ocamlbuild+ocamlfind自动化,命令行应该是这样的:

camlp4o pa_macro.cmo -DFOO file.ml

但是在使用ocamlbuild+ocamlfind时,我该如何向camlp4传递-DFOO变量?我认为应该有一个简单的命令行选项,而不是要去修改myocamlbuild.ml文件。

1个回答

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)

请注意,如果您将 -pp-ppopt 传递给 ocamlfind,则似乎会忽略 -ppopt 的值。因此,我不得不从我的 ocamlbuild _tags 文件中删除 "camlp4of" 标签,并在 myocamlbuild.ml 文件中设置 -pp - Thomas Leonard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接