在使用ocamlbuild时如何在.mly文件中使用电池库

4
我是一名帮助翻译的助手。

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

我的_tags文件只包含这一行:

true: use_menhir, package(batteries)

除了在.mly文件中使用Batteries时出现问题外,一切都正常。如果我在我的.mly文件的%{和%}之间使用open Batteries;;,在调用ocamlbuild时会出现“Error: Unbound module Batteries”的错误提示。
看起来当ocamlbuild像这样调用menhir时:
/usr/bin/menhir --ocamlc '/usr/bin/ocamlfind ocamlc' --infer parser.mly

它忘记在menhir的--ocamlc选项中添加-package batteries(或类似的内容)。

我该怎么解决?也许在我的_tags文件中为我的.mly文件设置特殊规则可以帮助吗?或者这是一个ocamlbuild的bug?

2个回答

5

在下一个OCaml版本发布之前,Jonathan提供了一个好的解决方法,链接中有详细说明。如果你的.mly文件名为foo.mly,则可以定义一个名为foo.mlypack的文件,并添加以下内容:

Foo

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


哈哈。真是够脏的。我喜欢它。谢谢 Gabriel。 - p4bl0

5

我正在使用OCaml 4.00.1、Batteries 2.1和ocamlbuild 4.00.1。这些都是最近发布的版本。我不想使用SVN版本,所以我想现在只能忍受这个错误了。感谢您澄清了这种情况。 - p4bl0
是的。使用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 使用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 interpreter -I lib -I compiler -I mezzolib -I tests/unit' --infer parsing/grammar.mly - Jonathan Protzenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接