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
在--ocamlc
menhir选项中添加(或等效的东西).
我该如何解决这个问题?也许我的_tags文件中的.mly文件的特殊规则可以帮助吗?或者它是一个ocamlbuild错误?
在下一个OCaml发布之前,Jonathan给出的链接中描述了一个很好的解决方法.如果您的.mly
文件已命名foo.mly
,则可以foo.mlypack
使用以下内容定义文件:
Foo
Run Code Online (Sandbox Code Playgroud)
foo.ml
然后生成将使用该.mlypack
文件(最初用于支持menhir的模块化语法组合功能),这将正确地将编译选项传递给--infer
参数 - 因为.mlypack
编译很久以前就已修复.