将.mly文件中的电池与ocamlbuild一起使用
我有一个包含OCaml.ml文件和Menhir.mly文件的项目。我使用ocamlbuild编译项目 My_标记文件包含以下单行:将.mly文件中的电池与ocamlbuild一起使用,ocaml,ocamlbuild,ocaml-batteries,menhir,Ocaml,Ocamlbuild,Ocaml Batteries,Menhir,我有一个包含OCaml.ml文件和Menhir.mly文件的项目。我使用ocamlbuild编译项目 My_标记文件包含以下单行: true: use_menhir, package(batteries) 除了我想在.mly文件中使用电池外,其他一切都正常工作。如果我打开电池
true: use_menhir, package(batteries)
除了我想在.mly文件中使用电池外,其他一切都正常工作。如果我打开电池在.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。脏得要命。我喜欢。谢谢加布里埃尔。