2

在 ocamlbuild 模式下使用OcaIDE时遇到问题。我正在尝试编译我自己的JoCaml源代码。根据JoCaml 手册(页面底部),要将 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 插件似乎不是一个解决方案,因为尽管-use-jocamlocamlbuild 中有一个选项可以强制使用 jocaml(并且工作正常),但插件系统不支持它,即 use_jocaml(或涉及 jocaml 的东西)是不在选项列表中。)

4

1 回答 1

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
于 2011-03-16T21:33:54.267 回答