#makefile #ocaml #ocamlbuild
#makefile #ocaml #ocamlbuild
Вопрос:
Я загрузил проект, который содержит следующие файлы:
assert.mli
assert.ml
deque.ml
deque.mli
eventloop.ml
eventloop.mli
g.ml
gctx.ml
gctx.mli
gdemo.html
gdemo.ml
gdemo.mli
g-js.ml.x
g-native.ml.x
lightbulb.html
lightbulb.ml
lightbulb.mli
Makefile
paint.html
paint.ml
paint.mli
widget.ml
widget.mli
widgetTest.ml
widgetTest.mli
Я могу скомпилировать некоторые файлы, которые не зависят от других файлов, выполнив
$ ocamlc assert.mli assert.ml
например. Однако, eventloop.ml
зависит от widget.ml
и widget.ml
зависит от gctx.ml
. gctx
кажется, зависит от модуля G
, который, как я полагаю, является графической библиотекой. Когда я заглядываю внутрь g-js.ml.x
, я вижу подтверждение того, что этот файл импортирует фиксированную версию графической библиотеки. Однако я понятия не имею, как использовать этот файл. Я попробовал несколько догадок в терминале, но безрезультатно. Предположение об одном примере было
$ ocamlc g-js.ml.x g.ml
Я попытался погуглить «как скомпилировать ocaml «.ml.x»», но ничего не нашел, и я не уверен, следует ли мне искать что-то еще, или просто не так много информации о том, как обрабатывать эти файлы.
Я также попробовал в терминале $ make -f Makefile
и получил ошибку
ocamlfind ocamldep -package js_of_ocaml-lwt.graphics -package js_of_ocaml-lwt -package js_of_ocaml -modules gdemo.mli > gdemo.mli.depends
ocamlfind: Package `js_of_ocaml-lwt.graphics' not found
Command exited with code 2.
Compilation unsuccessful after building 1 target (0 cached) in 00:00:00.
Makefile:51: recipe for target 'gdemo.byte' failed
make: *** [gdemo.byte] Error 10
Просматривая эту ошибку, другие люди обнаружили, что она исправлена путем обновления библиотек OPAM и особенно обновления cppo_ocamlbuild
, но это не исправило ее для меня.
Редактировать: После выполнения некоторых инструкций в комментариях я получаю новое сообщение об ошибке при попытке создать Makefile:
rm -rf g.ml
cp g-js.ml.x g.ml
ocamlbuild -use-ocamlfind -pkg js_of_ocaml -pkg js_of_ocaml-lwt -pkg js_of_ocaml-lwt.graphics gdemo.byte
Failure: ocamlfind not found on path, but -no-ocamlfind not used.
Compilation unsuccessful after building 0 targets (0 cached) in 00:00:00.
Makefile:51: recipe for target 'gdemo.byte' failed
make: *** [gdemo.byte] Error 2
Комментарии:
1. Вы проверили, что подпакет
js_of_ocaml-lwt.graphics
установлен вместе сocamlfind query js_of_ocaml-lwt.graphics
? В противном случае расширение.x
, вероятно, указывает на то, что файл предварительно обработан пользовательским препроцессором (и невозможно догадаться, что это за препроцессор из доступной информации).2. @octachron запрос не нашел подпакет, поэтому я его установил. Однако, похоже, что это не изменило ни одно из сообщений об ошибках.
3. Возникает ли у вас такая же ошибка при
ocamlfind ocamldep -package js_of_ocaml-lwt.graphics -package js_of_ocaml-lwt -package js_of_ocaml -modules gdemo.mli > gdemo.mli.depends
независимом запуске?4. @octachron Итак, мне немного неясно, какую именно «половину» ошибок это должно устранить. Я запустил эту команду, а затем запустил
make -f Makefile
и получил сообщение об ошибке с жалобой на предварительно скомпилированный файл из gdemo (предположительно, созданный командой, которую вы написали выше). Если это не та ошибка, которую я пытаюсь исправить, я попытался запуститьocamlc g-js.ml.x g.ml
, и он просто не знает, что я пытаюсь сделать.5. Как я уже говорил, ваши файлы *.x требуют предварительной обработки перед компиляцией. Этап предварительной обработки должен быть подробно описан в Makefile. Вы должны обновить сообщение об ошибке, чтобы отразить новое.