Ocaml 如何禁用错误(警告66):未使用打开!沙丘中

Ocaml 如何禁用错误(警告66):未使用打开!沙丘中,ocaml,ocaml-dune,Ocaml,Ocaml Dune,根据,OCaml 4.08及更高版本会对未使用的模块打开发出警告,即使它们是使用open。这会与使用open!Foo以确定以下代码将位于模块Foo的上下文中(无论是否从Foo内部使用任何东西)。此外,由于默认情况下dune将所有警告视为致命错误,这将导致默认dev配置文件中的dune构建失败,并出现以下错误: $ dune build File "lib/mylib.ml", line 1, characters 0-10: 1 | open! Core ^^^^^^^^^^ Error

根据,OCaml 4.08及更高版本会对未使用的模块打开发出警告,即使它们是使用
open。这会与使用
open!Foo
以确定以下代码将位于模块
Foo
的上下文中(无论是否从
Foo
内部使用任何东西)。此外,由于默认情况下
dune
将所有警告视为致命错误,这将导致默认
dev
配置文件中的dune构建失败,并出现以下错误:

$ dune build
File "lib/mylib.ml", line 1, characters 0-10:
1 | open! Core
    ^^^^^^^^^^
Error (warning 66): unused open! Core.
如何禁用此警告和致命错误?

说明了如何配置警告,使其“非致命”(让构建继续)。但是,这仍然会使警告混乱在构建输出中。对于使用
open的开发人员!Foo
习惯用语建立上下文,这很烦人。最好的解决方案是对项目有选择地禁用此警告:

  • 在项目的根目录下创建一个
    dune
    文件
  • 添加以下小节

    (env
      (dev
        (flags (:standard -w -66))))
    
本节指示
dune
dev
配置文件下构建时,将带有
-66
参数的
-w
标志传递给OCaml编译器
man 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.