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

p4b*_*bl0 4 ocaml ocamlbuild ocaml-batteries menhir

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

我的_tags文件包含这一行:

true: use_menhir, package(batteries)
Run Code Online (Sandbox Code Playgroud)

一切都很好,除非我想在.mly文件中使用电池.如果我open Batteries ;;之间%{%}呼吁ocamlbuild时:在我.mly文件,我得到"未绑定模块电池错误".

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

/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly
Run Code Online (Sandbox Code Playgroud)

它会忘记-package batteries--ocamlcmenhir选项中添加(或等效的东西).

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

小智 5

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


gas*_*che 5

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

Foo
Run Code Online (Sandbox Code Playgroud)

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