一个愚蠢简单的方法编译OCaml项目是什么?

7

我正在尝试使用OCaml。首先我想知道如何构建一个OCaml项目。目前,我只想要一个非常简单的东西,因为我只是在学习。有人可以向我指出一个构建系统以及使用该构建系统的“hello world”类型示例吗?

7个回答

13

ocamlopt是标准的本地代码编译器。典型的构建语法如下:

ocamlopt -o execname module1.ml module2.ml

你可以使用 ocamlc 来编译成字节码。

通常标准库已经包含在内。如果你正在使用*nix系统,并想要包含例如unix库,你可以做如下操作:

ocamlopt -o execname unix.cmxa module1.ml module2.ml

cmxa文件是本地代码库,cma文件是字节码库。

对于更复杂的构建,有ocamlfind程序可帮助定位库。您还可以使用GNU make和类似工具。更多信息可以在这里找到。 这个页面介绍了使用gmake。

这个页面是一个不错的“程序员第一次使用Ocaml”的入门页面。
这里是我在大学上Ocaml课程的讲座页面。不过,不要试图向Gunter教授寻求任何提示,如果我没记错的话,她是个邪恶的巨魔。


2
我也遇到过不少恶意的巨魔教授。注意到了。 :-) - Jason Baker

10

还有ocamlbuild。 对于没有外部依赖的简单项目,它非常简单:

ocamlbuild prog.native

这是一种非常简单的方法,尽管文档很糟糕。使用toplevel编译来调试程序也很有帮助,“ocamlbuild prog.top”。 - nlucaroni
这很有帮助。你也可以在这里找到它。https://realworldocaml.org/v1/en/html/a-guided-tour.html - eccstartup
1
根据我的经验,这是迄今为止编译多模块Ocaml项目最简单的方法。 - Nate C-K

4
请看 Markus Mottle 的 ocaml-make 项目。该项目包含 OCamlMakefile 文件。将其复制到您的源目录中并创建一个 Makefile,例如:
SOURCES = hello.ml
RESULT  = hello
-include OCamlMakefile

3

1
实际上,我更喜欢使用emacs。至于“hello world”示例,我想更多地考虑一个“hello world”类型的构建脚本,而不是OCaml的“hello world”。 :-) - Jason Baker
问题#118935中得票最高的答案是“在Caml模式或Tuareg模式下使用Emacs”,看一下吧;-) - VolkerK
我在使用omake时比使用ocamlbuild更加顺利 - 在omakefile中列出依赖包非常容易;而我无法弄清如何在ocamlbuild中完成这一点。最近我在ocaml邮件列表上读到,ocamlbuild已不再受支持。 - aneccodeal

2

您可能已经知道这一点,但是以防万一,OCaml包括一个REPL,您可以使用它进行交互式编码,而无需编译。当您初学时,它可能非常有用。


你可以在toplevel运行时键入#use "<filename.ml>"来包含一个文件。不要忘记在命令行中包含额外的(已编译的)模块(.cma文件),或者在toplevel中使用#load "filename.cma"。 - nlucaroni

1
一个备受关注的项目是OASIS,这是由Sylvain Le Gall开发的非常棒的构建系统。他在他的OCaml项目中使用它,我也是如此。

0
我还会为我的项目添加另一个 Ocaml 的 Makefile。
Makefile 和使用示例可以在 Ocaml 网站 找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接