Как можно использовать цепочку инструментов ocamlfind/ocamlbuild с локальными копиями пакетов проекта?

Я пытаюсь сохранить свой проект автономным, со всеми основными зависимостями сторонних библиотек, построенными и ссылающимися в репозитории проекта. Основные части моего проекта, основанные на ocaml, основаны на ocamlbuild.

Но для сложных пакетов, таких как Batteries Included, кажется, есть большие надежды, что они будут связаны с проектом через ocamlfind. ocamlfind предполагает, что пакеты будут установлены глобально. (Я понимаю, что он позволяет переменным среды и его конфигурации указывать на альтернативные местоположения, но в основном он по-прежнему построен на предположении, что пакеты настроены глобально — у него нет эквивалента флагов -I или -L для динамического расширения пути поиска для пакеты, например Можно установить переменные среды для динамического переопределения конфигурации ocamlfind для поиска в локальном дереве проекта, но это гораздо более неудобно, чем простые аргументы, и также кажется, что было бы сложно сделать это без одновременно удаление возможности обнаружения основных системных пакетов в первичном site-lib, что также может понадобиться.)

Какова разумная стратегия для сборки и сборки нетривиальных сторонних пакетов в локальном дереве проекта для проекта, использующего ocamlbuild?


person jrk    schedule 01.09.2011    source источник


Ответы (1)


Использование переменных среды (или отдельного findlib.conf) — это путь (и простой). И это не требует удаления возможности обнаружения глобальных пакетов, см. справочное руководство для path и destdir в findlib.conf (переменные окружения OCAMLPATH и OCAMLFIND_DESTDIR соответственно).

В основном вы устанавливаете destdir в локальный путь при установке локальных пакетов проекта и добавляете к path при их использовании (не забудьте создать stublibs в destdir (и добавить его к ld.conf в stdlib, если вы создаете двоичные файлы байт-кода)).

PS Я думаю, что этот подход используется в ocsigen-bundler.

Пожалуйста, сообщите, если у вас возникнут какие-либо проблемы (потому что я тоже заинтересован в использовании такого же подхода).

person ygrek    schedule 02.09.2011
comment
Я до сих пор не пошел по этому пути, поэтому я не спешил подтверждать успех, но я ожидаю, что это должно сработать. - person jrk; 21.09.2011