Compilation 使用第三方库进行编译

Compilation 使用第三方库进行编译,compilation,ocaml,Compilation,Ocaml,我正在使用解析commands.ml中的命令行参数。因此,commands.ml的第一行如下所示: open Getopt 我似乎不知道如何使用这个模块编译commands.ml。我尝试了很多东西,但总是出现以下错误: File "commands.ml", line 1, characters 5-11: Error: Unbound module Getopt 我在.ocamlinit文件中添加了#require“Getopt” 您说您正在使用Getopt,“所以”您的代码中有打开Get

我正在使用解析commands.ml中的命令行参数。因此,commands.ml的第一行如下所示:

open Getopt
我似乎不知道如何使用这个模块编译commands.ml。我尝试了很多东西,但总是出现以下错误:

File "commands.ml", line 1, characters 5-11:
Error: Unbound module Getopt

我在.ocamlinit文件中添加了#require“Getopt”

您说您正在使用
Getopt
,“所以”您的代码中有
打开Getopt
。但是那里没有直接的联系。在不打开模块的情况下使用模块更常见(我认为通常更好)

使用
open
仅控制包含模块中可用的名称。它不会告诉编译器在哪里查找打开的模块

标准OCaml库中没有
Getopt
模块。解析命令行的标准模块名为
Arg
。如果您使用的是外部库,则需要使用
-I
标志告知编译器在何处查找它

.ocamlinit
文件控制OCaml顶级(读取评估打印解释器)的行为。它不会影响编译器的行为


如果您使用的是构建工具,那么可能有更简单的方法来进行设置。但是您需要更仔细地解释您的构建环境。

问题在于,您的问题有很多答案。根据您选择的构建系统,将有不同的命令。这就是我们为什么要问的原因。但看起来,你没有偏好,所以让我试着给你一些答案

使用
ocamlbuild
使用
ocamlfind
欲了解更多解释,请阅读


个人建议:如果您不确定选择什么,请使用
ocamlbuild

ocamlfind
与您首选的编译器一起使用(我在下面使用ocamlopt),如下所示:

ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands
如果未安装getopt,此操作仍将失败。Getopt可与opam一起安装:

opam install getopt

我建议您改用
Arg
。它是OCaml标准库的一部分,通常使用起来很愉快。

我实际上只是在寻找一个能够成功编译commands.ml的命令。我知道我需要告诉编译器在哪里查找getopt,但我不知道如何查找。我已经尝试过使用
-I
标志bot执行命令,正如我所说,到目前为止,我尝试过的都没有成功。在
-I
标志之后,我必须做什么?我已经使用OPAM安装了
Getopt
ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands
opam install getopt