如何在OCaml中使用#use指令包含其他源文件?

时间:2013-05-16 17:58:56

标签: ocaml

我是OCaml的新手,我想把一些代码放到另一个文件中,比如foo.ml,就像在C ++或Python中一样。但是这部分代码本身并不构成一个模块。

我已将#use "foo.ml"包含在我的主要源文件的头部。但是当我使用ocamlbuild构建项目时,它会报告I/O error: "foo.ml: No such file or directory"。但显然foo.ml位于当前工作目录中。

我想知道是否有人知道如何在OCaml中实现这个目标并让我的项目被构建,或者如果这不是OCaml中的惯例?欢迎提出任何建议。

2 个答案:

答案 0 :(得分:12)

#use "foo.ml"是交互式顶层的指令,它不适用于编译器。

如果您想将代码拆分为不同的文件(这是一个好主意,并且强烈建议在OCaml中使用),那么您应该使用模块系统。 为什么说你的代码不构成模块?如果您的代码仅包含一次性函数,则它们应与使用它们的函数位于同一文件中。如果您的代码是可重用的,那么它就形成了一个模块。

答案 1 :(得分:4)

正如Thomash所说,这可能是解决问题的错误方法。

如果您还需要它,您必须使用camlp4或cppo等外部工具。

pa_macro的例子(ocaml附带):

test2.ml:

let arg = "Hello World"

test.ml:

INCLUDE "test2.ml"
let () =
   print_endline arg

汇编:

 ocamlfind ocamlc -syntax camlp4o -package camlp4 -ppopt pa_macro.cmo test.ml -o test