2015-04-30 3 views
4

Я пытаюсь скомпилировать проект Ocaml с версией Ocaml, предоставляемой Opam. Мой ocamlbuild, ocamlfind и оазис, кажется, OK:oasis поднимает неправильно ocamlbuild

/Users/fred/.opam/4.02.1/bin/ocamlbuild 
dhcp-182-73:compil fred$ which ocamlfind 
/Users/fred/.opam/4.02.1/bin/ocamlfind 
dhcp-182-73:compil fred$ which oasis 
/Users/fred/.opam/4.02.1/bin/oasis 

Но когда я пытаюсь скомпилировать, кажется, что неправильная версия ocamlbuild называется, и даже версия ocamlfind прав, я думаю, что это объясняет почему ocamlfind не может найти библиотеку sexplib.

$ make 
ocaml setup.ml -build 
Finished, 0 targets (0 cached) in 00:00:00. 
+ /Users/fred/.opam/system/bin/ocamlfind ocamldep -package threads -package sexplib.syntax -package core -package comparelib.syntax -modules src/tricot/tricot.mli > src/tricot/tricot.mli.depends 
ocamlfind: Package `sexplib.syntax' not found 
Command exited with code 2. 
Compilation unsuccessful after building 1 target (0 cached) in 00:00:00. 
E: Failure("Command ''/usr/local/bin/ocamlbuild' src/tricot/tricot.cma src/tricot/tricot.cmxa src/tricot/tricot.a src/tricot/tricot.cmxs src/compil/compil.cma src/compil/compil.cmxa src/compil/compil.a src/compil/compil.cmxs src/main.native -use-ocamlfind -tag debug' terminated with error code 10") 
make: *** [build] Error 1 

Я пытался сказать оазиса, какую версию ocambuild использовать без успеха, делает кто-то знает, как это может быть сделано? Благодаря

ответ

5

Попробуйте удалить setup.data и продолжить работу make еще раз. Oasis кэширует пути при первом попытке сборки и не обновляет их автоматически после этого. Возможно, вы пытались его построить, затем использовали opam switch, а затем попытались построить его снова?

+0

Спасибо, он работает! когда я попробовал «сделать» после этого, мой путь для ocamlbuild и ocamlfind, где указывается на мой репап Opam. Я думаю, что обновил мою версию OCaml с тех пор, как в последний раз я построил свой проект –

3

Вы должны пропускать

eval $(opam config env) 

Смотрите документацию opam switch.

Обратите внимание, что обычно процедура установки opam должна быть выполнена так, чтобы это автоматически вызывалось на новых оболочках. Возможно, вы захотите запустить opam init, и он предложит вам внести изменения в ваш .profile, чтобы все было в порядке, когда вы запускаете новые оболочки.

EDIT: На самом деле, похоже, вы изменили переключатель system между двумя вызовами, которые вы нам показываете. Похоже, что в system переключатель sexp не установлен. В любом случае всякий раз, когда вы opam switch в оболочке, всегда вызывайте указанную выше команду, чтобы настроить правильные пути.

+0

Спасибо, на самом деле это не видим смещение .. Opam указывает на версию 4.02.1, и я не пытался Измени это. –

+0

Когда я проверяю свою библиотеку с помощью Ocamlfind, все в порядке: ocamlfind query sexplib /Users/fred/.opam/4.02.1/lib/sexplib И когда я проверяю список opam, отображается sexplib. –

+0

Так что я думаю, что проблема исходит из оазиса. Я посмотрел в файле setup.data, написано ocamlc = "/ usr/local/bin/ocamlc.opt" ocamlopt = "/ usr/local/bin/ocamlopt.opt" ocamlbuild = "/ usr/local/bin/ocamlbuild " Но я не понимаю, почему он не выбирает мою версию этих программ, которые находятся в /Users/fred/.opam/4.02.1/bin/ ?? –

0

В дополнение к ответу Томаса, вы можете отказаться от конфигурации от

ocaml setup.ml -distclean 
Смежные вопросы