从OCaml repl中编译

从OCaml repl中编译,ocaml,Ocaml,我正在使用带有tuareg模式的emacs,并且我总是在emacs中打开ocaml repl。我想知道是否有一种从repl中编译基本OCaml测试文件的方法,这样我就不必以系统命令的形式运行编译。据我所知,没有,但您可以轻松地从emacs中运行编译 如果您使用M-x compile命令(C-C-C使用),编译将在emacs“编译模式”下运行,这非常好用。特别是,如果出现编译错误(M-x转到下一个错误或“C-x`”),它允许您直接跳转到代码中的错误位置 使用compile命令,您可以选择(shel

我正在使用带有tuareg模式的emacs,并且我总是在emacs中打开ocaml repl。我想知道是否有一种从repl中编译基本OCaml测试文件的方法,这样我就不必以系统命令的形式运行编译。

据我所知,没有,但您可以轻松地从emacs中运行编译

如果您使用
M-x compile
命令(
C-C-C
使用),编译将在emacs“编译模式”下运行,这非常好用。特别是,如果出现编译错误(
M-x转到下一个错误
或“C-x`”),它允许您直接跳转到代码中的错误位置

使用compile命令,您可以选择(shell)命令来运行编译。您可以直接调用ocaml编译器(通常是,
ocamlc-cfoo.ml
),或者使用
ocamlfind
来促进使用外部库进行编译,甚至可以使用
make
ocamlbuild
来自动完成大部分编译。通常,如果您有一个使用不同源文件的小项目,并且有一个
main.ml
文件,
ocamlbuild main.byte
将从中构建一个可执行文件

编辑:当然,您可以使用
Sys.command
函数从顶层调用系统命令。但是我看不出有什么意义。

你说的“repl”是指“read-eval-print-loop”,例如,你可能在Emacs中运行
run-caml

有一个Emacs命令,
compile
,用于编译,无论您正在做什么或正在编辑的文件。它通常绑定到C-C-C,但在我的inf caml版本中似乎没有。然而,您可以将它绑定到任何方便的序列(可能不是用于中断OCaml顶层的C-C-C)


您可以更改由
compile
启动的命令(默认值为
make-k
)。您的命令行应该保留在Emacs会话中。如果您不喜欢在会话之间丢失该命令,请编写一个Makefile,使默认命令成为正确的命令。这是最简单的方法。

听起来您可能还希望将编译后的文件加载到顶层?您可以使用附加参数重新启动toplevel,也可以使用
#load“file”
将其包含在内。