2013-05-16 25 views
4

我是OCaml的新手,我想将一些代码放到另一个文件中,比如foo.ml,就像在C++或Python中做的一样。但是这部分代码本身并不构成模块。我在主源文件的头部添加了#use "foo.ml"。但是当我使用ocamlbuild构建我的项目时,它报告I/O error: "foo.ml: No such file or directory"。但显然foo.ml在当前工作目录中。如何在OCaml中使用#use指令包含其他源文件?

我想知道是否有人知道如何在OCaml中实现这个目标,并让我的项目被构建,或者如果OCAML中不是这样的约定呢?任何建议都是值得欢迎的。

回答

12

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

如果你想在不同的文件中分割你的代码(这是一个好主意,并强烈推荐在OCaml中),那么你应该使用模块系统。 你为什么说你的代码没有形成模块?如果你的代码只包含一次性函数,它们应该和使用它们的函数在同一个文件中。如果你的代码是可重用的,那么它就形成一个模块。

+0

感谢和我应采纳你的做法。 – tfboy

3

正如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 
+0

谢谢。对camlp4很感兴趣。 – tfboy

相关问题