Использование ocamlfind с локальными каталогами

Поскольку у меня нет доступа с правами root на рабочей станции, я установил oUnit локально, в ~/ounit. Я могу загрузить модуль в интерпретаторе, если я запускаю

ocaml -I ~/ounit/oUnit

Теперь я хотел бы запустить тест, поэтому я пытаюсь скомпилировать его:

ocamlfind ocamlc -o test -package oUnit -I ~/ounit/oUnit -linkpkg -g foo.ml test.ml

К сожалению, ocamlfind не обнаруживает пакет oUnit

ocamlfind: Package `oUnit' not found

Что я делаю неправильно?

2 ответа

Вы можете установить OPAM без рута довольно легко. Например, мои сценарии Travis CI устанавливают OPAM в свои системы контейнеров без полномочий root, например:

wget https://downloads.sourceforge.net/project/zero-install/0install/2.8/0install-linux-x86_64-2.8.tar.bz2
tar xjf 0install-linux-x86_64-2.8.tar.bz2
cd 0install-linux-x86_64-2.8
./install.sh home
export PATH=$HOME/bin:$PATH
0install add opam http://tools.ocaml.org/opam.xml

(преимущество установки через 0install заключается в том, что вы автоматически получаете обновления для opam, а двоичные файлы oinstall 0install работают на более широком спектре систем, чем официальные двоичные файлы)

Решение заключается в использовании OCAMLPATH

OCAMLPATH=~/ounit ocamlfind ocamlc -o test -package oUnit -I ~/ounit/oUnit -linkpkg -g foo.ml test.ml
Другие вопросы по тегам