将.mly文件中的电池与ocamlbuild一起使用

将.mly文件中的电池与ocamlbuild一起使用,ocaml,ocamlbuild,ocaml-batteries,menhir,Ocaml,Ocamlbuild,Ocaml Batteries,Menhir,我有一个包含OCaml.ml文件和Menhir.mly文件的项目。我使用ocamlbuild编译项目 My_标记文件包含以下单行: true: use_menhir, package(batteries) 除了我想在.mly文件中使用电池外,其他一切都正常工作。如果我打开电池

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

My_标记文件包含以下单行:

true: use_menhir, package(batteries)
除了我想在.mly文件中使用电池外,其他一切都正常工作。如果我
打开电池%{
%}
之间,调用ocamlbuild时,我得到“错误:未绑定模块电池”

似乎当ocamlbuild调用menhir时,如下所示:

/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly
它忘记在menhir的
--ocamlc
选项中添加
-package电池
(或类似的东西)


我怎样才能解决这个问题?也许我的标签文件中的.mly文件的特殊规则会有所帮助?或者它是一个OCaml构建错误?

这应该在最近的OCaml版本中得到修复(请参阅)。您正在运行哪个版本?

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

Foo

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

我使用的是OCaml 4.00.1,Batteries 2.1,和ocamlbuild 4.00.1。这些是最新发布的版本。我不想使用SVN版本,所以我想我现在被这个bug困住了。谢谢你解决了这个问题。是的。使用svn版本:
menhir--explain--infer--la1--table--ocamlc'ocamlfind-ocamlc-I+ocamlbuild-g-annot-bin-annot-strict sequence-bin-annot-package-yojson-package-menhirLib-package-ulex-package-pprint-package-fix-I解析-I utils-I typing-I解释器-I lib-I编译器-I mezzolib-I测试/unit'--推断parsing/grammar.mly
with 4.00.1:
+menhir--explain--infer-la 1--table--ocamlc'/home/jonathan/.opam/4.00.1/bin/ocamlfind-ocamlc-I parsing-I utils-I typing-I解释器-I lib-I编译器-I mezzolib-I测试/unit'--推断解析/grammar.mly
Haha。脏得要命。我喜欢。谢谢加布里埃尔。