我有一个包含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错误?
答案 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
编译。