Каков предпочтительный способ структурирования и строить проекты OCaml?

Новичкам в экосистеме непонятно, какой канонически предпочтительный способ структурировать и управлять созданием малых и средних проектов OCaml. Я понимаю основы ocamlc и т. Д. - они достаточно отражают обычные компиляторы UNIX C, чтобы казаться простыми. Но, помимо разовой компиляции отдельных файлов, неясно, как лучше всего управлять компиляцией просто и чисто. Проблема не в поиске потенциальных инструментов, а в поиске одного или нескольких Правильных (достаточных) способов - подтвержденных опытом сообщества - для структурирования и построения стандартных проектов OCaml.

Мой пример использования - скромный. но нетривиальный проект, чистый OCaml или OCaml плюс зависимость C. Такой проект:

  1. содержит ряд исходных файлов
  2. , ссылки на ряд стандартных библиотек
  3. ссылки на одну или несколько сторонних библиотек
  4. , возможно, включает библиотеку C и оболочку OCaml в качестве подпроекта (хотя им также можно управлять отдельно и включить в качестве сторонней библиотеки, как в (3))

. Выделяются несколько альтернативных инструментов:

  • Пользовательские файлы Makefile кажутся обычным стандартом в большинстве пакетов OCaml с открытым исходным кодом, но выглядят удручающе многословными и сложными - даже больше, чем для скромных проектов C / C ++. Хуже того, многие даже кажущиеся простыми библиотеки OCaml накладывают поверх autoconf / automake для еще большей сложности.
  • ocamlbuild , похоже, предлагает современный, оптимизированный механизм для автоматизации сборок с минимальной конфигурацией, но он плохо документирован для новичков, ни представлены в качестве примеров во вводных материалах в экосистеме OCaml, ни явно не используются какими-либо из различных опубликованных проектов OCaml, которые я просматривал в поисках вдохновения.
  • OASIS , похоже, является слоем соглашений и библиотечного кода поверх других системы сборки для поддержки создания диспетчера пакетов и библиотеки, например Cabal.

(я также видел OMake , который выглядит самопровозглашенным " make ++ ", который также включает набор стандартных правил для распространенных языков, включая OCaml, и ocaml-make , урожденный OCamlMakefile, предоставляющий шаблон стандартного правила для GNU make .)

Является ли какой-либо из этих способов предпочтительным современным способом управления сборками OCaml?

Как лучше всего структурированы файлы проекта?

Каким образом включены зависимости сторонних библиотек и удалось? Что лучше: установить их на системном уровне или существует стандартный и простой способ управления ими локально в рамках проекта? Я бы предпочел модель, в которой проекты оставались бы как можно более самодостаточными.

57
задан ygrek 23 May 2012 в 07:43
поделиться