问题标签 [ocaml-dune]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
66 浏览

ocaml - 将 ocamlformat 与 cppo 和 dune 一起使用

为了使我们的代码适用于多个 ocamlgraph 版本,我们在我们的一个文件中使用了这个片段

在我们的dune文件中,我们使用 cppo 对其进行预处理,如下所示:

现在我们要使用dune build @fmt. 问题是,ocamlformat 不理解尚未预处理的文件。一种解决方法是将受影响的文件添加到其中,.ocamlformat-ignore但该文件相当大,因此很遗憾没有对其进行自动格式化。

这个问题有简单的解决方案吗?也许有一个常见的模式如何用沙丘解决这个问题?

0 投票
2 回答
90 浏览

ocaml - OCaml 崩溃时缺少信息

我是通过 opam 安装的 OCaml 的新手。我的编译器是沙丘。每次我构建我的项目并运行它时,它都会崩溃,但我没有从代码中崩溃的位置获得任何信息。

我的一个做同样事情的朋友会获得有关它崩溃的线路的信息。

如果有人有想法,那将是不可思议的!

此致,

0 投票
1 回答
96 浏览

ocaml - .cma 文件的沙丘行为

尝试使用该实用程序创建.cma文件(库)时遇到一些问题。dune我有以下项目树:

wherea.ml声明了一个非常简单的函数f,例如。当我直接运行ocamlc -o a.cma -a a.ml,然后启动时utop a.cma,我可以根据需要执行以下命令:

另一方面,在使用一次dune build(生成_build目录及其子目录)之后,_build/default/lib/a.cma我得到的文件占用的空间是手动生成的文件的十倍,更重要的是,它不起作用。两个命令都不成功utop _build/default/lib/a.cmacd _build/default/lib; utop a.cma我无法使用该模块A

我知道这个dune utop命令,但是如果我想在其他地方导出/共享我的库,dune没有安装在哪里?我应该做些什么?我使用dune错误的方式吗?先感谢您


PS:文件内容:

库/沙丘

0 投票
1 回答
332 浏览

ocaml - 沙丘:构建库并在另一个项目中访问它并隐藏或使不可访问的私有或实现模块

我正在使用Dune构建 OCaml 项目,并且我想构建一个独立的库以在其他项目中重用它。

库的根文件夹是,并且库是用(after )mylib初始化的。dune init lib mylib srccd mylib

mylib项目的根目录树如下:

以下是文件的内容。

mylib/沙丘项目

mylib/src/dune

mylib/src/priv.ml

mylib/src/mymodule.mli

mylib/src/mymodule.ml

在给出上下文并显示这个玩具示例的每个文件的内容之后,问题如下:

  1. 如何构建库mylib并在另一个单独的项目中使用它?

(例如,在另一个项目中,我会使用以下库:

或者

)

使用 Dune,给定可执行文件,如果它发布在Opammain上,您将编写以下dune文件以使用库。mylib

沙丘

  1. 成功构建库并将其链接到另一个项目后,如何隐藏或不公开某些模块?例如,给定之前的玩具库mylib,我不想公开和使模块无法访问Priv(这样Priv只能在模块内部使用mylib- 就像 Java/C# 中的受保护/内部类)。

​</p>

我尝试在Real World OCamlCornell CS3110 教科书Dune 文档OCaml Learn上进行搜索,但除非深度嵌套,否则我一无所获。

非常感谢您的帮助,如果我没有清楚地解释某些事情,请询问,我会尽力解释得更好。

0 投票
1 回答
139 浏览

ocaml - 当我要求使用 ocamlopt 时,为什么沙丘使用 ocamlc?

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

^ 在src目录中

0 投票
1 回答
51 浏览

ocaml - 将新建的文件复制为沙丘的节

我在 OCaml 中编写了一个库,其所有源都位于lib文件夹中。我还在文件夹中准备了“外观”可执行bin文件。现在我想准备一些如何使用上述可执行文件的示例。为此,我需要事先复制一个可执行文件,或者(最好)告诉 Dune 在构建后使用一个新创建的可执行文件。

这是我的问题。沙丘的copy_files节不允许1我从_build文件夹中复制。有没有其他方法可以在每次构建后使用新的可执行文件,或者我是否需要在某个时候复制它们并保持最新?

以下是项目的结构(以防口头描述以任何方式误导)。

1不允许我指的是本节的以下用法: ( copy_files %{project_root}/_build/default/bin/program.exe )

0 投票
1 回答
484 浏览

ocaml - 如何拥有嵌套库?对沙丘等感到困惑

我有一个使用 OCaml 的项目dune

按照基本教程中的建议,我有一个目录结构,如:

我的目录中的文件数量lib正在增长,我希望有另一个级别的命名空间。

我想要子目录,例如:

我希望能够像这样打开它们Lib.Utils.Whatever

我认为这一定是可能的?

我试着在dune下面创建一个文件lib/utils

...但open Lib.Utils.Whatever似乎不起作用。

我找到了该subdir...但是如果我将其添加到lib/dune并定义utils为子目录library,那么我不会得到命名空间...我必须open Utils而不是open Lib.Utils

0 投票
1 回答
153 浏览

ocaml - Ocaml utop 不(但确实)识别 Big_int

我有一些使用模块的代码Big_int,例如:

但是,当我用 utop 编译它时dune utop --release(我用它release来避免一些警告),然后我得到这个错误:

Error: Required module `Big_int' is unavailable

我已经阅读了它并且我已经阅读(https://groups.google.com/g/felix-language/c/1CfHgpe9zps?pli=1)'Big_int不再是 OCaml 发行版的一部分。它被 Zarith 取代。好吧,我知道,而且我仍然可以使用Big_int.

我怎么知道?关键是,如果我从utop没有错误的任何其他文件开始,并且一旦进入我 open Big_int,那么它不会后悔:

utop # open Big_int;;

在那里,它会自动完成 my Big_int.,就像在Big_int.add_big_int. 所以在Big_int某个地方并且它被识别(VSCode 也自动完成它)。

有一点我不明白。有什么帮助吗?

0 投票
1 回答
168 浏览

ocaml - Opam 中的图形安装

我正在尝试使用 安装图形opam install graphics,但收到以下错误消息:

我尝试了以下解决方案,但它们似乎都不起作用:

  1. https://github.com/ocaml/graphics/issues/16(运行中export LIBRARY_PATH=/opt/X11/lib
  2. 还添加export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig"到我的 .zshrc 文件中(这在与 1 相同的线程中提到。

当我运行pkg-config --list-all | grep x11x11 库时会弹出,但由于某种原因,在尝试安装图形时似乎找不到垃圾邮件。任何的意见都将会有帮助!

这是我当前的计算机配置:

  • macOS BigSur 版本 11.2.1
  • Ocaml 编译器 4.11.1

更新:

此问题已在以下线程 ( https://github.com/ocaml/graphics/pull/36#issuecomment-846827032 ) 中提出,并将在新的图形版本中更新。

0 投票
1 回答
75 浏览

ocaml - 为 LLVM 安装 OCaml 绑定

我使用 OCaml 绑定构建了 LLVM13 rc4。运行后ninja install,我看到绑定现在安装在$HOME/.opam/4.12.0/lib/ocaml. 但是,我运行dune build时,系统似乎没有意识到绑定已安装。

如何将构建的绑定添加到 OCaml?