使用ocamlbuild在.mly文件中使用电池

时间:2013-08-17 16:05:54

标签: ocaml ocamlbuild ocaml-batteries menhir

我有一个包含OCaml .ml文件和Menhir .mly文件的项目。我使用ocamlbuild来编译项目。

我的_tags文件包含以下单行:

true: use_menhir, package(batteries)

除非我想在.mly文件中使用电池,否则一切正常。如果我在.mly文件中的open Batteries ;;%{之间%},则在调用ocamlbuild时会收到“错误:未绑定模块电池”。

似乎当ocamlbuild正在调用menhir时,就像这样:

/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly

它忘记在menhir的-package batteries选项中添加--ocamlc(或等效的东西)。

我该如何解决?也许我的_tags文件中的.mly文件的特殊规则可以帮助吗?或者它是一个ocamlbuild错误?

2 个答案:

答案 0 :(得分:5)

这可以在最近的OCaml版本中修复(参见http://caml.inria.fr/mantis/view.php?id=5763)。你正在运行哪个版本?

答案 1 :(得分:5)

在下一个OCaml发布之前,Jonathan给出的链接中描述了一个很好的解决方法。如果您的.mly文件名为foo.mly,则可以使用以下内容定义foo.mlypack文件:

Foo

然后,生成foo.ml将使用.mlypack文件(最初用于支持menhir的模块化语法组合功能),这将正确地将编译选项传递给--infer参数 - 因为很久以前修复了.mlypack编译。