我使用盖托普解析commands.ml中的命令行参数。因此,commands.ml的第一行如下所示:
open Getopt
我似乎不知道如何用这个模块编译commands.ml。我尝试了很多事情,我总是遇到以下错误:
File "commands.ml", line 1, characters 5-11:
Error: Unbound module Getopt
我在我的.ocamlinit文件中添加了#require "Getopt“。
发布于 2015-06-19 17:46:36
您说您使用的是Getopt
,“所以”您的代码中有open Getopt
。但那里没有直接联系。在我看来,在不打开模块的情况下使用模块更常见(在我看来通常更好)。
open
的使用仅控制包含模块中可用的名称。它没有告诉编译器在哪里查找打开的模块。
标准的Getopt
库中没有OCaml模块。解析命令行的标准模块名为Arg
。如果使用外部库,则需要使用-I
标志来告诉编译器在哪里查找它。
.ocamlinit
文件控制OCaml toplevel (读-古-打印解释器)的行为。它不影响编译器的行为。
如果您使用的是构建工具,那么可能有更容易设置的方法。但是,您需要更仔细地解释您的构建环境。
发布于 2015-06-21 14:42:37
问题是,你的问题有很多答案。根据您选择的构建系统,将有不同的命令。这就是我们为什么要问的原因。但是看起来,你没有偏好,所以让我试着给你一些答案。
用ocamlbuild
$ ocamlbuild -package getopt commands.native
用ocamlfind
$ ocamlfind ocamlopt -package getopt commands.ml -o commands.native
要获得更多的解释,请阅读下面是。
个人建议:如果你不确定该选择什么,那么就使用ocamlbuild
。
发布于 2015-06-22 21:32:41
在您的首选编译器中使用ocamlfind
(我在下面使用ocamlopt ),如下所示:
ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands
如果没有安装getopt,这仍然会失败。Getopt可安装opam:
opam install getopt
我建议您改用Arg
。它是OCaml标准库的一部分,通常使用起来很愉快。
https://stackoverflow.com/questions/30943224
复制相似问题