Правильно компилирующие модули в подпапках (ocamlbuild)

Я недавно решил организовать файлы в своем каталоге проекта. Я переместил синтаксические анализаторы, которые я имел для нескольких различных типов файлов в их собственный каталог и также решил использовать 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 не включен в связывающуюся фазу выше; на самом деле ни один из связанных с синтаксическим анализатором файлов не включен!

править: Добавленные новые детали из комментариев и ответа ниже.

10
задан nlucaroni 8 February 2010 в 20:47
поделиться

2 ответа

Интересно, не мешает ли parser.mli каким-либо образом зависимостям обрабатывать файл mlpack. parser.cmi будет сгенерирован из операции упаковки, когда parser.mlpack обработан и скомпилирован. Попробуйте выполнить сборку с удаленным файлом parser.mli . Если это сработает, то это можно будет переработать в настоящий ответ.

Кроме того, вам не нужен parser / в качестве префикса для ваших модулей в parser.mlpack , если parser.mlpack находится в parser , и у вас есть набор тегов include . Но это не должно иметь никакого значения.

Обновление : это помогло решить проблему, но не было ее основной причиной. Первопричиной, согласно приведенному ниже комментарию, был файл, упомянутый в .mlpack , который был перемещен.

3
ответ дан 4 December 2019 в 02:50
поделиться

Вам необходимо «включить» каталог парсера в путь поиска. Вы можете сделать это в _tags :

"parser": include

Затем ocamlbuild сможет искать в каталоге парсера интересные файлы.

4
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: