我看过这个问题 - 如何将 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 编译器一起安装(自 OCaml 4.09 起),您需要在
package.json
文件中将其声明为 opam 依赖项。