ocamlc, сборка модулей - PullRequest
       17

ocamlc, сборка модулей

2 голосов
/ 04 декабря 2009

Я написал приложение в ocaml. Он состоит из нескольких модулей:

  • Util (util.ml)
  • Work1 (work1.ml) - открыть Util
  • Work2 (work2.ml) - тоже открыть Util
  • Main (main.ml) - открыть все из них.

Когда я компилирую его, используя ocamlc, компиляция не удалась на модуле Work2, и я получаю сообщение об ошибке о несвязанном значении от Util. Отдельная компиляция тоже не работает. Что я делаю не так?

ocamlc -o app.out -vmthread -pp camlp4o.opt unix.cma threads.cma camlp4of.cma util.ml work1.ml work2.ml main.ml

Спасибо!

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

Порядок файлов в командной строке в OCaml значителен. Вы должны поместить файлы в порядке зависимости. Это, вероятно, проблема, с которой вы столкнулись. Попробуйте изменить порядок файлов, пока он не заработает ...

0 голосов
/ 04 мая 2012

Используйте ocamlbuild, он по волшебству вычисляет зависимости, строит в отдельном каталоге, легко интегрируется с ocamlfind (с 3.12) и, как правило, потрясающий.

Создать _tags файл с:

true: thread, package(unix)
<*.ml>: camlp4o

И сборка с

ocamlbuild -use-ocamlfind main.byte
0 голосов
/ 13 декабря 2009

Если у вас есть модули, подобные следующим:

module Util
    ...
end;;

module Work2
     open Util
     ...
end;;

module Main
    open Util;;
    open Work2;;
    ...
end;;

Module Work1
    open Work2;;
    ...
end;;

тогда порядок должен быть таким, что когда каждый модуль вызывает open, он обнаруживает, что открытый модуль уже является компилятором, в приведенном выше примере порядок будет

Util -> Work2 -> Work1 -> Main

Обратите внимание, что OCaml не поддерживает циклическое резервирование для модулей, что означает, что вы не можете иметь

module Work1
       open Work2;;
end;;

module Work2
       open Work1;;
end;;

если ваше приложение немного сложное с большим количеством модулей, вы можете использовать Ocamldep http://caml.inria.fr/pub/docs/manual-ocaml/manual027.html, и оно определит зависимость от графика для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...