Ocaml编译多个文件(循环依赖)

时间:2011-05-05 16:02:19

标签: dependencies compilation ocaml circular-dependency

我已经为ocaml下载了xml-light并尝试编译它,但它从未成功过,问题如下。

当我输入ocamlopt dtd.ml时,会出现错误Unbound module Xml。 然后我输入ocamlopt xml.ml,会出现错误Unbound value XmlParser.make。 然后我输入ocamlopt xmlParser.ml,会出现错误Unbound module Dtd

实际上有一种方法可以将它们一起编译吗?因此我感到很愚蠢。

1 个答案:

答案 0 :(得分:2)

这不是那么微不足道,没什么可惊讶的。这是make的输出(来自mingw / cygwin ocaml发行版):

ocamlyacc xml_parser.mly
ocamlc  xml.mli
ocamlc  dtd.mli
ocamlc  xml_parser.mli
ocamlc  -c xml_parser.ml
ocamllex xml_lexer.mll
ocamlc  xml_lexer.mli
ocamlc  -c xml_lexer.ml
ocamlc  -c dtd.ml
ocamlc  xmlParser.mli
ocamlc  -c xmlParser.ml
ocamlc  -c xml.ml
ocamlc -o xml-light.cma -a  xml_parser.cmo xml_lexer.cmo dtd.cmo xmlParser.cmo xml.cmo

测试:

ocamlc xml-light.cma test.ml -o test.exe

make install输出:

ocamlopt  -c xml_parser.ml
ocamlopt  -c xml_lexer.ml
ocamlopt  -c dtd.ml
ocamlopt  -c xmlParser.ml
ocamlopt  -c xml.ml
ocamlopt -o xml-light.cmxa -a  xml_parser.cmx xml_lexer.cmx dtd.cmx xmlParser.cmx xml.cmx

cp xml-light.cmxa xml-light.a xml-light.cma xml.mli xmlParser.mli dtd.mli xml.cmi xmlParser.cmi dtd.cmi xml.cmx dtd.cmx xmlParser.cmx `ocamlc -where`

注意最后一行(我用换行符分隔它):你可能没有cp命令;只需手动创建%OCAMLLIB%\xml-light目录并在那里复制列出的文件。然后你可以像这样建立你的项目:

ocamlopt -I +xml-light xml-light.cmxa foo.ml -o foo.exe