OCaml:如何解决多个 `cmi` 的 findlib 警告
OCaml: how to solve findlib warnings of multiple `cmi`s
现在我尝试使用 ocamlfind
和一些包编写编译器,尤其是 ppx_sexp_conv
和 opam
。
ppx_sexp_conv
的依赖关系需要 compiler-libs
所以编译选项 -I ~/.opam/VERSION/lib/compiler-libs
在 ocamlfind ocamlc -package ppx_sexp_conv
.
编译文件时被添加
问题是,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。
抑制这些警告的一种方法是将 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]
在shell中,执行以下操作
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
已经过预处理,没有发出额外的警告。
参考:
现在我尝试使用 ocamlfind
和一些包编写编译器,尤其是 ppx_sexp_conv
和 opam
。
ppx_sexp_conv
的依赖关系需要 compiler-libs
所以编译选项 -I ~/.opam/VERSION/lib/compiler-libs
在 ocamlfind ocamlc -package ppx_sexp_conv
.
问题是,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。
抑制这些警告的一种方法是将 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]
在shell中,执行以下操作
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
已经过预处理,没有发出额外的警告。
参考: