Если вы хотите выполнить свой код таким образом, вы ограничены тем, что команда ocaml
ожидает любое количество предварительно скомпилированных файлов OCaml (файлов байт-кода) и один файл .ml
. Если вы предоставляете несколько файлов .ml
, он игнорирует все, кроме первого.
Причина вашего наблюдаемого поведения заключается в том, что ваша командная строка запрашивает ocaml
для запуска файла как программы. Другими словами, он выполнит весь код верхнего уровня в первом файле .ml
(игнорируя остальные) и затем завершится. Я предполагаю, что у вас нет кода верхнего уровня, который дает видимый результат в вашем module1.ml
файле.
Вы можете сделать эту работу (или, по крайней мере, улучшить ситуацию), скомпилировав все, кроме одного из файлы, использующие ocamlc
:
$ ocamlc -c section1/module2.ml
$ ocamlc -c section2/module3.ml
$ ocaml section1/module2.cmo section1/module3.cmo module1.ml
Вы также можете загрузить файлы на верхний уровень после запуска:
$ ocaml
OCaml version 4.10.0
# #use "section1/module2.ml";;
# #use "section1/module3.ml";;
# #use "module1.ml";;
#
Это то, что я обычно делаю, чтобы поэкспериментировать с моим кодом.
Если я просто хочу запустить код, с другой стороны, я компилирую все файлы и затем просто запускаю результат:
$ ocamlc -o myprogram section1/module2.ml section1/module3.ml module1.ml
$ ./myprogram