Oasis 选择了错误的 ocamlbuild
oasis picks up wrong ocamlbuild
我尝试用 Opam 提供的 Ocaml 版本编译一个 Ocaml 项目。
我的 ocamlbuild、ocamlfind 和 oasis 似乎还不错:
/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
我试图告诉 oasis 使用哪个版本的 ocambuild 但没有成功,有人知道该怎么做吗?
谢谢
你肯定少了一个
eval $(opam config env)
请参阅 opam switch
的文档。
请注意,通常 opam
的安装过程应该已经完成,以便在新的 shell 上自动调用它。您可能想再次 运行 opam init
它会提示您同意对您的 .profile
进行更改,以便在您开始新的 shell 时一切正常。
编辑:事实上,您似乎更改了向我们展示的两个调用之间的 system
开关。所以似乎在 system
开关 sexp
没有安装。在任何情况下,只要你在 shell 中 opam switch
总是调用我上面提到的命令,以便设置正确的路径。
再次尝试删除 setup.data
和 运行 make
。 Oasis 会在您第一次尝试构建时缓存路径,之后不会自动更新它们。也许您尝试构建它,然后使用 opam switch
,然后再次尝试构建它?
除了 Thomas 的回答之外,您还可以通过
丢弃配置
ocaml setup.ml -distclean
我尝试用 Opam 提供的 Ocaml 版本编译一个 Ocaml 项目。 我的 ocamlbuild、ocamlfind 和 oasis 似乎还不错:
/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
我试图告诉 oasis 使用哪个版本的 ocambuild 但没有成功,有人知道该怎么做吗? 谢谢
你肯定少了一个
eval $(opam config env)
请参阅 opam switch
的文档。
请注意,通常 opam
的安装过程应该已经完成,以便在新的 shell 上自动调用它。您可能想再次 运行 opam init
它会提示您同意对您的 .profile
进行更改,以便在您开始新的 shell 时一切正常。
编辑:事实上,您似乎更改了向我们展示的两个调用之间的 system
开关。所以似乎在 system
开关 sexp
没有安装。在任何情况下,只要你在 shell 中 opam switch
总是调用我上面提到的命令,以便设置正确的路径。
再次尝试删除 setup.data
和 运行 make
。 Oasis 会在您第一次尝试构建时缓存路径,之后不会自动更新它们。也许您尝试构建它,然后使用 opam switch
,然后再次尝试构建它?
除了 Thomas 的回答之外,您还可以通过
丢弃配置ocaml setup.ml -distclean