Непонятным для новичков в экосистеме является канонически предпочтительный способ структурирования и управления проектами OCaml малого и среднего размера. Я понимаю основы ocamlc
, & c. - они зеркалируют обычные компиляторы UNIX C, достаточные для кажущегося простого. Но, выше уровня одноразовой компиляции отдельных файлов, неясно, как лучше всего управлять компиляцией просто и чисто. Проблема заключается не в поиске потенциальных инструментов, а в поиске одного или нескольких правильных (достаточных) способов - как это подтверждается опытом сообщества - для структурирования и построения стандартных проектов OCaml.
Мой пример использования модели - это скромный, но нетривиальный проект, чистый OCaml или OCaml плюс зависимость от C. Такой проект:
- содержит несколько исходных файлов
- ссылки на несколько стандартных библиотек
- ссылки на одну или несколько сторонних библиотек
- необязательно включает библиотеку C и OCaml-оболочку в качестве подпроекта (хотя это также можно управлять отдельно и включать в качестве сторонней библиотеки, как в (3))
Выделяются несколько альтернативных инструментов:
- Пользовательские Makefiles, по-видимому, являются обычным стандартом в большинстве пакетов OCaml с открытым исходным кодом, но выглядят разочаровывающими и сложными - даже больше, чем для скромных проектов C/С++. Хуже того, многие даже, казалось бы, простые библиотеки OCaml, использующие autoconf/automake сверху для еще большей сложности.
- ocamlbuild, как представляется, предлагает современный, оптимизированный механизм автоматизации сборки с минимальной конфигурацией, но он плохо документирован для новичков, представленный примером во вводных материалах в экосистеме OCaml, и явно не используется ни одним из различных опубликованных проектов OCaml, которые я просматривал для вдохновения.
- OASIS кажется слоем кода конвенции и библиотеки на других системах сборки для поддержки построения диспетчера пакетов и библиотеки, таких как Cabal.
(Я также видел OMake, который выглядит как самозваный "make++
", который также включает в себя набор стандартные правила для общих языков, включая OCaml, и ocaml-make née OCamlMakefile, предоставляющий шаблон стандартных правил для GNU make
.)
Являются ли какие-либо из них предпочтительным, современным способом управления OCaml?
Как файлы проекта лучше всего структурированы?
Как включены и управляются зависимостей сторонних библиотек? Желательно ли устанавливать их на системном уровне или существует стандартный и простой способ управления ими локально для проекта? Я бы предпочел модель, в которой проекты остаются как можно более самодостаточными.