Как я могу написать библиотеку в OCaml?
Я пишу кодировщик / декодер bson в ocaml.
У меня есть исходный файл сейчас (на самом деле только один файл).
Мой вопрос в том, как мне сделать это как библиотеку, такую как ocaml-batteries-included
, camomile
, так далее?
Я имею в виду, люди могут использовать opam install
это и использовать ocamlfind
+ ocamlbuild
скомпилировать с этим?
3 ответа
Поддержки ocamlfind
это действительно легко, и нет никаких оправданий, чтобы этого не делать. По сути, выберите любую "похожую" библиотеку, найдите файл META и адаптируйте его под свои собственные настройки. Я дал некоторые основные инструкции в этом ответе Stackru.
OCamlbuild - это система сборки, которую вы можете использовать по своему усмотрению или нет, но она не должна влиять на ваших пользователей (кроме того факта, что они захотят установить ее до сборки ваших программ). Вы также можете использовать Makefile или любую другую систему сборки (omake и т. Д.). Идея ocamlbuild состоит в том, чтобы просто _tags
файл с достаточной информацией для создания вашей библиотеки / программы (и если вы делаете myocamlbuild.ml
файл также). Опять же, посмотрите, какие проекты имеют структуру, аналогичную вашей.
Для Opam есть руководство по упаковке, которое дает ваши указания (но, опять же, просто адаптируйте то, что делают другие люди).
Я представлю кое-что немного нестандартное, но полностью пригодное для использования: obuild. Все, что вам нужно, это project.obuild
файл, а затем obuild build
построит ваш проект. obuild install
установит его с помощью ocamlfind.
Установите obuild из github вместо opam, так как версия opam немного устарела. Вот образец obuild
файл, чтобы дать вам идею: https://github.com/vbmithr/ocaml-websocket/blob/master/websocket.obuild
Пойти на оазис; вы в основном создаете файл _oasis
это описывает вашу библиотеку. oasis
Затем инструмент создаст для вас систему сборки. Вы можете установить Oasis через Opam. Для Oasis есть краткое руководство по началу работы.
Oasis - это попытка стандартизировать машиночитаемое описание пакетов OCaml. И в то же время, он может создать систему сборки как побочный продукт (в настоящее время ocamlbuild
на основе одного и Makefiles поддерживаются).