Ocaml компилирует несколько файлов (круговые зависимости) - PullRequest
1 голос
/ 05 мая 2011

Я скачал xml-light для ocaml и пытаюсь скомпилировать его, но это никогда не удавалось, проблема заключается в следующем.

Когда я введу ocamlopt dtd.ml, будет ошибка Unbound module Xml. Затем я ввожу ocamlopt xml.ml, будет ошибка Unbound value XmlParser.make. Затем я ввожу ocamlopt xmlParser.ml, будет ошибка Unbound module Dtd.

есть ли способ собрать их вместе? Я чувствую себя так глупо из-за этого.

1 Ответ

2 голосов
/ 05 мая 2011

Это не так тривиально, ничего удивительного.Вот вывод 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
...