Использование батарей в файле.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
сборник был исправлен давно.