Во-первых, вы на самом деле не хотите знать, какой cma загружать, скорее вы хотите знать, какой пакет загрузить через ocamlfind.Далее следует отметить, что компиляторы ocaml должны выполнить то же самое, чтобы скомпилировать проект - т.е. по имени модуля, на который есть ссылка в исходном коде, найти скомпилированный интерфейс для этого модуля.Итак, давайте подражаем этому поведению.Компиляторы получают пути включения из командной строки, но мы должны искать все возможные пути включения.Итак, мы идем:
for i in $(ocamlfind list | cut -d ' ' -f 1) ; do
if [ -r $(ocamlfind query $i)/XXX.cmi ] ; then
echo $i; break;
fi ;
done
или
ocamlfind printconf path | xargs -n1 -I/ find / -name XXX.cmi
Примечание: отображение от имени модуля к имени файла не является уникальным - например, SomeModule
может быть представлено либо someModule.cmi
, либо SomeModule.cmi
(реже).