从终端编译和 运行 Ocaml 脚本

Compiling and Running Ocaml Script from the Terminal

我在文件夹中存储了名为 assert.mlassert.mlitest.mltest.mli 的文件。 assert 是我猜你会称之为库文件——这是我下载但不是我自己写的东西。 test.ml 是一个包含脚本

的文件
;; open Assert 
;; print_endline "test"

在终端中,我导航到包含的文件夹,然后 运行

$ ocamlc -c assert.mli test.mli
$ ocaml assert.ml test.ml

结果什么也没发生。但是,如果我从脚本中删除 ;; open Assert 行并且 运行

$ ocaml test.ml

然后打印。

请注意,有些人告诉我不要将打开命令写成 ;; open Assert,但该建议似乎完全是文体。对于我正在参加的class,我必须这样写。

如果有人能向我解释我应该如何以不同的方式进行编译和 运行ning,我将不胜感激。我尝试按照其他一些指南的建议使用 ocamlopt 代替,但是当我 运行 它时,结果没有生成可执行文件。

ocaml 命令是 OCaml 的 REPL。命令行如下所示:

ocaml [ object-files ] [ script-file ]

目标文件是编译的(字节码)模块,由ocamlc 命令生成。这些文件以 .cmo 结尾。脚本文件是OCaml源代码文件,以.ml.

结尾

注意只允许一个脚本文件。

您说您正在使用的命令有两个脚本文件,没有目标文件。因此,它不起作用也就不足为奇了。在我的实验中,ocaml 所做的只是 运行 两个脚本文件中的第一个。我相信这可以解释您所看到的。你的一个文件产生输出,如果你先给它,它将是 运行。另一个不产生输出,所以当那个文件先给出时没有输出。

您可能应该做的是为 Assert 模块生成一个 .cmo 文件。

看起来像这样:

$ ocamlc -c assert.mli assert.ml test.mli

那么你应该 运行 ocaml 一个目标文件和一个脚本文件,像这样:

$ ocaml assert.cmo test.ml