Function 无法使用OCAML中其他文件中的函数

Function 无法使用OCAML中其他文件中的函数,function,compilation,ocaml,Function,Compilation,Ocaml,首先,我使用以下makefile进行编译(我不知道它是否重要,但因为我使用它进行编译…): 但是当我试图在我的project.ml中调用它时,就像这样: Main.yolo "lol"; 我只是有一个错误,说模块Main未绑定: [OK] [project.mli] builded File "project.ml", line 34, characters 1-10: Error: Unbound module Main make: *** [project.cmx] Erreur 2 这

首先,我使用以下makefile进行编译(我不知道它是否重要,但因为我使用它进行编译…):

但是当我试图在我的
project.ml中调用它时,就像这样:

Main.yolo "lol";
我只是有一个错误,说模块
Main
未绑定:

[OK] [project.mli] builded
File "project.ml", line 34, characters 1-10:
Error: Unbound module Main
make: *** [project.cmx] Erreur 2
这里还有
project.ml
project.mli
为空)的内容:

在搜索stackoverflow已经提出的问题时,我发现很多人都有同样的问题。。。。因为他们使用了
#use
,但这不是我的情况


作为一个初学者,如果你能向我解释一下,那就太棒了:)。

你有计算依赖关系的代码,但没有包括它们。因此,
Project
是在尚未构建
Main
时构建的

Makefile
末尾添加以下行可以修复此问题:

-include .depend

话虽如此,我还是建议不要使用
make
和像
ocamlbuild
这样的构建工具。在没有任何设置的情况下,您可以运行
ocamlbuild project.byte
,并具有等效功能。

在Makefile中,模块的
ML
列表应按拓扑顺序排序,即,应在其所有依赖项之后指定模块。在您的情况下,Makefile的头应该如下所示:

NAME =  project

ML =    main.ml \
        project.ml
最后但并非最不重要的一点是,我强烈建议您不要使用Makefiles来编译OCaml程序,除非您真正了解自己在做什么以及低级OCaml工具链是如何运行的。小项目使用
ocamlbuild
,大项目使用
oasis
。在您的情况下,您不需要任何特定的内容来构建您的项目,只需这样做即可

ocamlbuild project.native

你会得到二进制文件。它还将使您的工作目录保持干净(如果它已经脏了,它将帮助您对其进行清理)。

main.ml
project.ml
project.mli
的内容以及准确的错误消息包含在内会很有帮助。这个错误消息什么时候发生?当一个模块被构建或在链接阶段时?@艾蒂安米隆补充道:)没有什么令人难以置信的,希望它能有所帮助^^^这只会将错误推迟到链接阶段。您仍然需要按照拓扑顺序指定模块,因为链接规则显式地依赖于从ML列表构建的CMO列表。
-include .depend
NAME =  project

ML =    main.ml \
        project.ml
ocamlbuild project.native