Какова цель файла _tags с OCaml и как интерпретировать его содержимое?

Из сообщения Создание кода OCaml, использующего понимание списка, я могу использовать _tags файл для выполнения ocamlbuild с меньшим количеством параметров сборки.

$ cat _tags
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension)

Из Введение в батареи мне также нужно иметь _tags для использования пакета Batteries.

<*>: package(batteries)

Почему в первом примере используется <**/*>, а во втором — <*>? В общем, для чего нужен файл _tags в ocamlbuild? У вас есть хорошие уроки по нему?


person prosseek    schedule 27.02.2015    source источник


Ответы (1)


Файл _tags в дополнение к myocamlbuild.ml образует корень системы компиляции ocamlbuild.

ocamlbuild — очень универсальный инструмент, который может скомпилировать что угодно. Он управляется решателем, который в соответствии с целью, установленной пользователем, находит решение, которое может удовлетворить цель. Решение представляет собой цепочку правил, которые применяются к файлам. Файлы могут быть помечены тегами. Теги могут изменять правила. Например, он может добавлять флаги, такие как включение профилирования или привязка к библиотеке.

Файл _tags предоставляет механизм для присвоения тегов файлам и имеет простую грамматику:

 pattern ":" tag "," {tag}.

То, что находится слева от :, на самом деле является шаблоном или регулярным выражением. Каждому файлу, соответствующему выражению, будут присвоены все теги, расположенные справа от :.

<**/*> означает, что для всех файлов в этой папке и всех подпапках есть ярлык: true. <*> означает для всех файлов в этой папке (без спуска в подпапки). Другими примерами являются <*.ml>, <*.cmx> или <**/*.cma> (кстати, or также можно использовать для построения шаблона).

OCamlbuild задокументирован в Руководстве по OCaml, а также дамп старой вики с большим количеством информации.

Но самое интересное, что обычно вам не нужно знать это, чтобы использовать OCaml. Существует инструмент OASIS, который автоматизирует все задачи и создаст для вас _tags файл из простое и высокоуровневое определение.

person ivg    schedule 27.02.2015