从终端编译和运行Ocaml脚本

时间:2017-09-21 01:25:56

标签: ocaml read-eval-print-loop

我有一个名为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,但建议似乎完全是风格的。我必须以这种方式为我上课。

如果有人能向我解释我应该如何编译和运行,我会很感激。我尝试过其他一些指南'建议使用ocamlopt而不是当我运行它时,没有生成可执行文件。

1 个答案:

答案 0 :(得分:4)

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

ocaml [ object-files ] [ script-file ]

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

请注意,只允许使用一个脚本文件。

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

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

看起来像这样:

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

然后你应该用一个目标文件和一个脚本文件运行ocaml,如下所示:

$ ocaml assert.cmo test.ml