4

我有一个包含 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 错误?

4

2 回答 2

5

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

Foo

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

于 2013-08-19T08:04:26.933 回答
5

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

于 2013-08-17T17:04:28.777 回答