微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我要求使用 ocamlopt 时,为什么 dune 使用 ocamlc?

$ 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'.

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

(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))))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。