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



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

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

我想知道是否有人知道如何在OCaml中实现这一目标,并让我的项目被构建,或者如果这不是OCaml中的约定?

#use "foo.ml"是一个用于交互顶层的指令,它不能与编译器一起工作。

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

正如Thomash已经说过的,这可能是解决你问题的错误方法。

如果你需要它,你必须使用camp4或外部工具,如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

最新更新