当我要求使用 ocamlopt 时,为什么 dune 使用 ocamlc?

Why is dune using ocamlc when I asked to use ocamlopt?

$ dune build ./src/main.exe --profile=release
      ocamlc src/.main.eobjs/byte/ast.{cmi,cmo,cmt} (exit 2)
(cd _build/default && /usr/bin/ocamlc.opt -w -40 -O3 -g -bin-annot -I src/.main.eobjs/byte -I /home/jackprograms/.opam/default/lib/cairo2 -I /home/jackprograms/.opam/default/lib/lablgtk3 -I /usr/lib/ocaml/threads -no-alias-deps -o src/.main.eobjs/byte/ast.cmo -c -impl src/ast.ml)
/usr/bin/ocamlc.opt: unknown option '-O3'.

我 运行 这个,沙丘正在使用 ocamlc 字节码...我正在使用 exe 这意味着本机,正如我在沙丘文档中看到的那样。为什么它是 运行 ocamlc 而它应该是 运行 ocamlopt?

(executable
 (name main)
 (libraries lablgtk3)
 (modes exe))

(ocamllex
 (modules lexer))

(ocamlyacc
 (modules parser))

(env
 (dev
  (flags (:standard -w +42)))
 (release
  (flags (:standard -O3))))

^ 在 src 目录中

它仍然会使用ocamlc编译.cmi个文件。

不使用 flags(例如 (flags (:standard -O3))),而是使用 ocamlopt_flags.

(executable
 (name main)
 (libraries lablgtk3)
 (modes exe))

(ocamllex
 (modules lexer))

(ocamlyacc
 (modules parser))

(env
 (dev
  (flags (:standard -w +42)))
 (release
  (ocamlopt_flags (:standard -O3))))