Я использую emacs с режимом tuareg, и у меня всегда есть ocaml repl, открытый внутри emacs. Мне было интересно, есть ли способ скомпилировать базовые тестовые файлы OCaml из реплики, поэтому мне не нужно запускать компиляцию в виде системной команды.Компиляция из OCaml repl
ответ
Насколько я знаю, нет, но вы можете легко запустить компиляцию из emacs.
Если вы используете M-x compile
команду (C-c C-c
с помощью tuareg mode), компиляция выполняется в Emacs, который довольно приятно работать с «режим компиляции». В частности, он позволяет вам перейти непосредственно к ошибочным позициям в коде в случае ошибки компиляции (M-x goto-next-error
или «C-x` »).
С командой компиляции вы выбираете команду (shell) для запуска компиляции. Вы можете напрямую вызвать компилятор ocaml (обычно ocamlc -c foo.ml
) или использовать ocamlfind
, чтобы облегчить компиляцию с использованием внешних библиотек и даже make
или ocamlbuild
, чтобы автоматизировать большую часть компиляции для вас. Как правило, если у вас небольшой проект с использованием разных исходных файлов, с файлом main.ml
, ocamlbuild main.byte
выполнит задачу создания из него исполняемого файла.
Редактировать: конечно, вы можете вызвать системную команду из верхнего уровня, используя функцию Sys.command
. Но я не вижу смысла.
Под «repl» вы имеете в виду «цикл чтения-eval-print», который, возможно, вы использовали, например, для запуска run-caml
в Emacs.
Существует команда Emacs, compile
, для компиляции независимо от того, что вы делаете, или файлов, которые вы редактируете. Обычно он связан с C-c C-c, но, похоже, не в моей версии inf-caml. Тем не менее, вы можете привязать его к любой удобной последовательности (возможно, не C-c C-c, которая используется для прерывания OCaml toplevel).
Вы можете изменить команду, запущенную compile
(по умолчанию make -k
). Ваша командная строка должна быть сохранена в сеансе Emacs. Если вам не нравится, что он потерян из сеанса в сеанс, напишите Makefile, чтобы команда по умолчанию была правильной. Это самый простой способ.
Похоже, вы также можете захотеть, чтобы скомпилированные файлы загружались на верхний уровень? Вы можете либо перезапустить toplevel с дополнительными аргументами, либо использовать файл '#load ', чтобы включить его. – nlucaroni