根据https://github.com/ocaml/ocaml/pull/1110,OCaml 4.08 及更高版本会对未使用的模块打开发出警告,即使它们是使用open!. open! Foo这与使用来确定以下代码位于模块上下文中的常见做法产生了摩擦Foo(无论是否从内部使用任何东西Foo)。此外,由于dune默认情况下将所有警告视为致命错误,这将导致默认dev配置文件中的沙丘构建失败,并出现类似错误
$ dune build
File "lib/mylib.ml", line 1, characters 0-10:
1 | open! Core
^^^^^^^^^^
Error (warning 66): unused open! Core.
Run Code Online (Sandbox Code Playgroud)
如何禁用此警告和致命错误?
Sho*_*hon 13
沙丘常见问题解答解释了如何配置警告,使其“非致命”(让构建继续进行)。但是,这仍然会使警告混乱您的构建输出。对于使用open! Foo习惯用法来建立上下文的开发人员来说,这很烦人。最好的解决方案就是有选择地为项目禁用此警告:
dune在项目的根目录创建一个文件添加以下节
(env
(dev
(flags (:standard -w -66))))
Run Code Online (Sandbox Code Playgroud)此节指示在配置文件下构建时将带有参数的标志dune传递给 OCaml 编译器。解释这个标志是如何工作的:-w-66devman ocamlc
-w warning-list
Enable, disable, or mark as fatal the warnings specified by the argument warning-list.
...
-num Disable warning number num.
...
The warning numbers are as follows.
...
66 Unused open! statement.
Run Code Online (Sandbox Code Playgroud)