Я недавно решил организовать файлы в своем каталоге проекта. Я переместил синтаксические анализаторы, которые я имел для нескольких различных типов файлов в их собственный каталог и также решил использовать ocamlbuild (поскольку проект становился более сложным, и простой сценарий оболочки не был достаточен больше).
Я смог успешно включать внешние проекты путем изменения myocamlbuild с некоторыми основными правилами (вызов ocaml_lib
, Я буду использовать ocamlfind некоторое другое время), но я застреваю о том, как включать папку как модуль в проект правильно. Я создал a parser.mlpack
файл и заполненный это надлежащими модулями, которые будут включены (например, "синтаксический анализатор/Дата", и так далее), записал a parser.mli
в корне каталога для их реализаций, и измененный _tags
файл (см. ниже).
Во время компиляции каталог синтаксического анализатора пересечен правильно, и parser.cmi
, parser.mli.depends
были оба созданы в _build
каталог; а также все *.cm[xio]
файлы в подкаталоге синтаксических анализаторов.
Я чувствую, что мог бы делать что-то избыточное, но независимо, проект все еще не может найти модуль Синтаксического анализатора, когда я компилирую!
Спасибо!
_tags
debug : true
<*.ml> : annot
"parser" : include
<parser/*.cmx>: for-pack(Parser)
<curlIO.*> : use_curl
<mySQL.*> : use_mysql
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql
ошибка компиляции
/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native
File "\_none\_", line 1, characters 0-1:
Error: **No implementations provided for the following modules:**
Parser referenced from project.cmx
Command exited with code 2.
Вы заметите -I parser
не включен в связывающуюся фазу выше; на самом деле ни один из связанных с синтаксическим анализатором файлов не включен!
править: Добавленные новые детали из комментариев и ответа ниже.
Интересно, не мешает ли parser.mli
каким-либо образом зависимостям обрабатывать файл mlpack. parser.cmi
будет сгенерирован из операции упаковки, когда parser.mlpack
обработан и скомпилирован. Попробуйте выполнить сборку с удаленным файлом parser.mli
. Если это сработает, то это можно будет переработать в настоящий ответ.
Кроме того, вам не нужен parser /
в качестве префикса для ваших модулей в parser.mlpack
, если parser.mlpack
находится в parser
, и у вас есть набор тегов include
. Но это не должно иметь никакого значения.
Обновление : это помогло решить проблему, но не было ее основной причиной. Первопричиной, согласно приведенному ниже комментарию, был файл, упомянутый в .mlpack
, который был перемещен.
Вам необходимо «включить» каталог парсера в путь поиска. Вы можете сделать это в _tags
:
"parser": include
Затем ocamlbuild
сможет искать в каталоге парсера интересные файлы.