向 ReasonML 项目添加图形

问题描述 投票:0回答:1

我看过这个问题 - 如何将 OCaml 库引用添加到 Reason 代码文件? - 它展示了如何将 OCaml 库添加到 ReasonML 项目。但这似乎对我不起作用。部分问题是我真的不知道 esy 和 dune 在做什么,并且逐步完成告诉我要输入什么内容的示例都很好......除了我不知道为什么要输入它。

我有一个沙丘文件:

(executable
  (public_name graphics_example.exe)
  (name graphics_example)
  (libraries graphics))

我从 hello-reason 示例中复制了一个 package.json 文件:

{
  "name": "hello-reason",
  "version": "0.1.0",
  "description": "Example Reason Esy Project",
  "license": "MIT",
  "esy": {
    "build": "dune build -p #{self.name}",
    "buildDev": "dune build --promote-install-files --root . --only-package #{self.name}",
    "NOTE": "Optional release Section. Customizes result of `esy release`",
    "release": { "rewritePrefix": true, "bin": [ "Hello" ] },
    "buildEnv": { "ODOC_SYNTAX": "re" }
  },
  "scripts": {
    "test": "esy x Hello",
    "format": "esy dune build @fmt --auto-promote",
    "doc": "esy dune build @doc"
  },
  "dependencies": {
    "@opam/dune": "*",
    "@opam/reason": "*",
    "ocaml": "5.x"
  },
  "devDependencies": {
    "@opam/ocaml-lsp-server": "*",
    "@opam/merlin": "*",
    "@opam/odoc": "*"
  }
}

我有一个 ReasonML 文件,graphics_example.re:

open Graphics;

open_graph("");
set_window_title("SPIKE");

ignore(wait_next_event([Button_down]));

如果我输入

dune exec ./graphics_example.exe  

我的程序实际运行并显示一个图形窗口。 (我在 Mac M1 上安装了 XQuartz 来实现这一点,遵循早期实验中的建议。)但是如果我运行

esy
,我会得到以下结果:

info esy 0.8.0 (using package.json)
File "dune", line 4, characters 12-20:
4 |  (libraries graphics))
                ^^^^^^^^
Error: Library "graphics" not found.
-> required by
   /Users/jhughes/Documents/Projects/ReasonML/hello-reason-master/_esy/default/store/b/hello_reason-e15a11c9/default/graphics_example.exe
-> required by alias all
-> required by alias default
error: command failed: 'dune' 'build' '--promote-install-files' '--root' '.' '--only-package' 'hello-reason' (exited with 1)
esy-build-package: exiting with errors above...
error: build failed with exit code: 1
  
esy: exiting due to errors above

所以我不明白我可能做了什么才能使图形程序工作,即使我找不到图形库,而且我不明白为什么我一开始找不到图形库,因为它是一个OCaml 中的标准库。

do知道,如果我从

dune
文件中删除“图形”作为库,那么
dune exec ./graphics_example.exe
不再起作用,所以看起来沙丘正在以某种方式找到esy找不到的库,或者......我不知道。如果能有任何澄清,我将不胜感激。

ocaml reason
1个回答
0
投票

图形库不再与 OCaml 编译器一起安装(自 OCaml 4.09 起),您需要在

package.json
文件中将其声明为 opam 依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.