2013-08-17 6 views
4

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

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

true: use_menhir, package(batteries) 

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

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

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

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

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

ответ

5

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

+0

Я использую OCaml 4.00.1, батареи 2.1 и ocamlbuild 4.00.1. Это самые последние выпущенные версии. Я не хочу работать с версией SVN, поэтому, наверное, сейчас я застрял с ошибкой. Спасибо, что расчистили ситуацию. – p4bl0

+0

Да. С версией svn: 'menhir --explain --infer -la 1 --table --ocamlc 'ocamlfind ocamlc -I + ocamlbuild -g -annot -bin-annot -строчная последовательность -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 ' –

5

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

Foo 

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

+0

Ха-ха. Грязный, черт возьми. Мне это нравится. Спасибо, Габриэль. – p4bl0