Ответ 1
Вы можете упаковать его как независимую библиотеку, установить ее вместе с другими библиотеками OCaml и получить доступ к ней из своего проекта в виде библиотеки.
Очень простой способ сделать это - написать META файл для ocamlfind
. Создайте каталог где-нибудь, где вам удобно провести проект "персональная библиотека". Предположим, что у вас есть tools.ml
и tools.mli
, и ваш код зависит от некоторого пакета findlib (например, unix
и bigarray
). Вы META выглядели бы так:
name="tools"
description="personal collection of utilities"
version="0.1"
requires="unix,bigarray"
archive(byte)="tools.cmo"
archive(native)="tools.cmx"
Как только вы написали этот файл META, попросить ocamlfind
"установить" библиотеку (и удалить ее, если хотите), и использовать ее в других проектах. Для установки синтаксис ocamlfind install <name> <meta-file> <file1> <file2> ...
, где <file1>, <file2>..
- это файл, который вы хотите видеть, включенным в каталог установки. Вы должны, по крайней мере, иметь tools.cmi
tools.cmo
(и tools.o
и tools.cmx
для встроенной компиляции), но неплохо также иметь tools.mli
например (и, если вы хотите предоставить код, tools.ml
).
ocamlfind install tools META tools.cmi tools.cmo tools.o tools.cmx tools.mli
(Конечно, tools.cmo
и т.д. должны существовать, т.е. вы должны install
после того, как вы скомпилировали свой пакет. Если вы использовали ocamlbuild
, они, вероятно, будут находиться в подкаталоге _build
, поэтому ocamlfind install ... _build/tools.cmo ...
.)
Из ваших многочисленных проектов вы можете легко использовать свою библиотеку, либо используя ocamlfind toold напрямую, если это то, что вы уже делаете, чтобы скомпилировать ваши программы.
ocamlfind ocamlc -package tools ....
или через средства, предоставляемые ocamlbuild
, например, добавив package(tools)
к вашим тегам.
Чтобы переустановить библиотеку, если вы внесли изменения в нее и хотите, чтобы она была доступна из ваших проектов
ocamlfind remove tools
ocamlfind install tools META ...
Вы также можете обрабатывать все это через oasis
, который является слоем поверх ocamlfind/ocamlbuild, чтобы автоматизировать этот процесс. Я не достаточно знаком с oasis
, чтобы привести такие примеры с ног до головы, но он должен быть одинаково простым для такого ограниченного случая (однофайловая библиотека) и масштабироваться лучше, если вы захотите расширить свою библиотеку (например, он также может обрабатывать создание документации, конфигурацию предварительной компиляции...).