我在ocamlbuild模式下使用OcaIDE时遇到问题。我正在尝试编译自己的JoCaml来源。根据{{3}}(页面底部),要将ocamlbuild与JoCaml一起使用,我只需要将-use-jocaml
参数添加到ocamlbuild中。的确,如果我转到项目的根目录并写下
ocamlbuild -use-jocaml foo.native
它生成我的可执行文件就好了。
然而,在OcaIDE我得到了
/bin/sh: jocamldep: command not found
在OcaIDE中,-use-jocaml
标志在“其他标志”框中传递(在“项目属性”中)。这肯定是有效的,因为投诉恰恰是它找不到jocaml的东西。令人费解的是,jocaml已安装,可以从任何随机终端窗口访问。例如,运行
jocamldep -modules foo.ml > foo.ml.depends
确实生成了所需的依赖文件。
所以,似乎我必须配置OcaIDE并告诉它JoCaml可执行文件在哪里或什么的。例如,这是为OCaml完成的。但是JoCaml没有地方可以做到这一点。真的很奇怪,如果jocamldep / jocamlc / etc都可以从任何地方访问,OcaIDE将无法选择它们。
有什么想法吗?
(我知道我可以做一个ocamlbuild插件并在“myocamlbuild.ml”文件中传递该标志。在我熟悉ocamlbuild插件后,我可能会使用后一阶段。但这里的问题是关于OcaIDE 。编辑:实际上,ocamlbuild插件似乎不是一个解决方案,尽管ocamlbuild中有一个选项-use-jocaml
来强制使用jocaml(并且它工作正常),插件系统不支持它,即use_jocaml(或涉及jocaml的东西)不在JoCaml manual列表中。)
答案 0 :(得分:2)
当您在ocamlbuild项目上开始构建时,OcaIDE会调用:
ocaml.exec.ExecHelper#execMerge
创建new java.lang.ProcessBuilder
,并使用其默认环境(ProcessBuilder#environment()
)。
要帮助调试您的问题,请在Eclipse中运行以下Java程序:
public static void main(String[] args) {
Map<String, String> environment = new ProcessBuilder().environment();
for (Entry<String, String> entry : environment.entrySet()) {
if ("path".equalsIgnoreCase(entry.getKey())) {
System.out.println("PATH = " + entry.getValue());
}
}
}
它应该显示传递给OcamlBuild的相同路径。
您还可以在工作区中导入OcaIDE插件源并在调试模式下运行,并在ocaml.exec.ExecHelper#execMerge
中使用断点来查看ocamlbuild的调用方式。
您可以尝试使用正确的路径创建一个shell脚本来启动Eclipse:
类似于startEclipse.sh
(与eclipse可执行文件位于同一文件夹中):
#!/bin/bash
export PATH=<your path to JoCaml>:$PATH
./eclipse