2016-07-10 3 views
4

Теперь я пытаюсь написать компилятор, используя ocamlfind и некоторые пакеты, особенно ppx_sexp_conv с opam.
В некоторых случаях зависимости ppx_sexp_conv требуют compiler-libs, поэтому при компиляции файлов добавляется -I ~/.opam/VERSION/lib/compiler-libs. ocamlfind ocamlc -package ppx_sexp_conv.OCaml: как решить findlib предупреждения нескольких `cmi` s

Проблема заключается в том, что compiler-libs включает в себя очень распространенные файлы имен, такие как parsing.cmi, main.cmi, lexing.cmi.
Это делает конфликты .cmi файлов и сделать много шумных предупреждения следующим образом:

$ ocamlfind ocamlc -package ppx_sexp_conv -c parser.mli 
findlib: [WARNING] Interface main.cmi occurs in several directories: ., /home/nomaddo/.opam/4.02.3/lib/ocaml/compiler-libs 
findlib: [WARNING] Interface lexer.cmi occurs in several directories: ., /home/nomaddo/.opam/4.02.3/lib/ocaml/compiler-libs 
findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /home/nomaddo/.opam/4.02.3/lib/ocaml/compiler-libs, /home/nomaddo/.opam/4.02.3/lib/ocaml 
findlib: [WARNING] Interface parser.cmi occurs in several directories: ., /home/nomaddo/.opam/4.02.3/lib/ocaml/compiler-libs 

`` `

Обратите внимание, что main.cmi, parsing.cmi, lexing.cmi и main.cmi существуют в том же каталоге.

Я считаю, что такие имена файлов являются общими, и все хотят использовать.
Мой вопрос в том, как успокоить такие шумные предупреждения.
Благодаря им трудно найти более важные предупреждения и ошибки сразу ...

Мое окружение: ocaml 4.02.3 с opam 1.2.2.

ответ

9

Один из способов подавления этих предупреждений - установить переменную окружения findlib OCAMLFIND_IGNORE_DUPS_IN на /home/nomaddo/.opam/4.03.0/lib/ocaml/compiler-libs.

Ниже приведен пример с OCaml 4.03.0 и ppx_sexp_conv версии 113.33.01 + 4.03.

parser.mli:

type t = int [@@deriving sexp] 

В оболочке, выполните следующие действия

export OCAMLFIND_IGNORE_DUPS_IN=/home/nomaddo/.opam/4.03.0/lib/ocaml/compiler-libs 

ocamlfind ocamlc -package ppx_sexp_conv -dsource -c parser.mli 

Вы можете увидеть .mli предобработан и никакого дополнительного предупреждения не излучается.

Ссылка:

+0

Спасибо за ваш быстрый ответ. Я решил эту проблему! – nomaddo