Компиляция с использованием сторонних библиотек

Я использую Getopt для разбора аргументов командной строки в commands.ml. Итак, первая строка command.ml выглядит так:

open Getopt

Я не могу понять, как я скомпилировал command.ml с этим модулем. Я пробовал так много вещей, и я всегда получаю следующую ошибку:

File "commands.ml", line 1, characters 5-11:
Error: Unbound module Getopt

Я добавил #require "Getopt" в мой файл.ocamlinit.

3 ответа

Решение

Вы говорите, что используете Getopt"так" у вас есть open Getopt в вашем коде. Но прямой связи там нет. Более обычно (и, на мой взгляд, обычно лучше) использовать модули, не открывая их.

Использование open контролирует только имена, доступные в содержащем модуле. Он не сообщает компилятору, где искать открытые модули.

Нет никаких Getopt модуль в стандартной библиотеке OCaml. Стандартный модуль для разбора командных строк называется Arg, Если вы используете внешнюю библиотеку, вам нужно использовать -I флаг, указывающий компилятору, где его искать.

.ocamlinit Файл управляет поведением верхнего уровня OCaml (интерпретатор read-eval-print). Это не влияет на поведение компиляторов.

Если вы используете строительный инструмент, возможно, есть более простые способы его настройки. Но вам нужно будет объяснить вашу среду сборки более тщательно.

Использование ocamlfind с вашим предпочтительным компилятором (я использую ocamlopt ниже), например так:

ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands

Это все равно не удастся, если у вас не установлен getopt. Getopt может быть установлен с opam:

opam install getopt

Я хотел бы предложить вам использовать Arg вместо. Это часть стандартной библиотеки OCaml, с которой приятно работать.

Проблема в том, что есть много ответов на ваш вопрос. В зависимости от того, какую систему сборки вы выбрали, будут разные команды. И это причина, почему мы спрашиваем. Но похоже, что у вас нет предпочтений, поэтому позвольте мне дать вам несколько ответов.

С ocamlbuild

$ ocamlbuild -package getopt commands.native

С ocamlfind

$ ocamlfind ocamlopt -package getopt commands.ml -o commands.native

Для более подробного объяснения прочитайте следующее.

Личный совет: если вы не знаете, что выбрать, используйте ocamlbuild,

Другие вопросы по тегам