2013-08-17 58 views
4

我有一个带有OCaml .ml文件和Menhir .mly文件的项目。我使用ocamlbuild来编译这个项目。在ocamlbuild中使用.mly文件中的电池

我_tags文件包含此单行:

true: use_menhir, package(batteries) 

一切运作良好,除了当我想在.mly文件中使用的电池。如果我在我的.mly文件中的%{%}之间的open Batteries ;;,调用ocamlbuild时会出现“Error:Unbound module Batteries”。

看来,当ocamlbuild呼吁巨石,像这样:

/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly 

它忘记在巨石的--ocamlc选项添加-package batteries(或等价的东西)。

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

回答

5

这应该在最近的OCaml版本中被修复(见http://caml.inria.fr/mantis/view.php?id=5763)。你正在运行哪个版本?

+0

我使用OCaml 4.00.1,电池2.1和ocamlbuild 4.00.1。 这些是最新发布的版本。我不想与SVN版本合作,所以我想现在我已经陷入了bug。感谢您清除这种情况。 – p4bl0

+0

是的。 svn版本: 'menhir --explain --infer -la 1 --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 parsing -I utils -I typing -I interpreter -I lib -I compiler -I mezzolib -I tests/unit'--infer 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 lib -I编译器-I mezzolib -I tests/unit' - 解析/ grammar.mly ' –

5

在下一个OCaml发布之前,Jonathan给出的链接中有一个很好的解决方法。如果您.mly文件被命名为foo.mly,你可以定义一个foo.mlypack文件,内容如下:

Foo 

生产然后foo.ml将使用.mlypack文件(本意支持巨石的模块化语法组合功能),这将正确地传递--infer参数的编译选项 - 因为.mlypack编译早已修复。

+0

哈哈。肮脏的地狱。我喜欢。谢谢加布里埃尔。 – p4bl0