2011-05-05 18 views
1

我已经为ocaml下载了xml-light并尝试编译它,但它从未成功,问题如下。Ocaml编译多个文件(循环依赖)

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

实际上是否有将它们一起编译的方法?因为这个,我感到很蠢。

回答

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` 

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

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

@barti:你帮我再......反正,还有一件事不能到目前为止完成。当我把这个文件放到我的项目文件夹中时,我想用'open xml ;;'来打开这个文件,为什么它给了我一个错误信息:'错误:xml.cmi不是一个已编译的接口',什么我在这里错过了吗? – zfm 2011-05-05 16:32:16

+0

@zfm:我已经更新了答案(参见'make install'部分) – 2011-05-05 16:47:56

+0

@barti:在IDE上没有办法做到这一点吗?当我使用IDE并键入'open xml ;;'或任何其他文件时,我使用'Camelia'并且发生错误 – zfm 2011-05-05 16:54:22