Использование батарей в файле.mly с ocamlbuild

У меня есть проект с файлами OCaml .ml и файлом Menhir .mly. Я использую ocamlbuild для компиляции проекта.

Мой файл _tags содержит одну строку:

true: use_menhir, package(batteries)

Все работает хорошо, за исключением случаев, когда я хочу использовать батареи в файле.mly. Если я open Batteries ;; между %{ а также %} в моем файле.mly при вызове ocamlbuild появляется сообщение об ошибке "Unbound module Batteries".

Кажется, что когда ocamlbuild вызывает менгир, вот так:

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

забыть добавить -package batteries (или что-то эквивалентное) в --ocamlc вариант менгира.

Как я могу это исправить? Может быть, поможет специальное правило для моего файла.mly в моем файле _tags? Или это ошибка ocamlbuild?

2 ответа

Решение

Это предположительно исправлено в последних версиях OCaml (см. http://caml.inria.fr/mantis/view.php?id=5763). Какую версию вы используете?

Перед следующим выпуском OCaml есть хороший обходной путь, описанный в ссылке, предоставленной Джонатаном. Если твой .mly файл назван foo.mlyВы можете определить foo.mlypack файл со следующим содержанием:

Foo

производства foo.ml затем будет использовать .mlypack файл (изначально предназначенный для поддержки функции модульной грамматической комбинации менгира), который будет правильно передавать параметры компиляции в --infer параметр - потому что .mlypack сборник был исправлен давно.

Другие вопросы по тегам