问题标签 [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 回答
93 浏览

ocaml - Opam 可以安装最新的软件包并告诉'Already up-to-date'?

我想opam用来安装版本为或更高dune版本的软件包。1.11.0但它告诉我Already up-to-datewhile duneis still 1.2.1

粘贴我的操作:

接着:

但是dune没有升级..它仍然1.2.1..我怎样才能安装我想要的更高版本?

  • opam --version1.2.2
  • dune --version1.2.1
0 投票
1 回答
193 浏览

gtk - 使用沙丘构建 lablgtk hello world 的正确设置是什么?

有人可以帮我设置 OCaml 项目吗?

我想使用沙丘创建一个构建环境,因为我正在开发一个 gui 应用程序,所以我想从这里构建 lablgtk 示例:GTK Hello World! 我可以使用链接中的说明来构建它,但我想使用沙丘来构建它,这目前不起作用。我收到一个 cmi 文件丢失的错误。

命令行界面中的输出:

来自 VScode 中 Merlin 的 Infro

输出与dune build main.exe --verbose

0 投票
1 回答
58 浏览

ocaml - 没有为以下模块提供实现(Mtime_clock,Mtime)

在我的项目中,我使用的是按此处所述安装的 OCanren 包:https ://github.com/JetBrains-Research/OCanren#Installation 。

我有一个test.ml使用 OCanren 的文件:

dune同一目录中的一个文件:

这是我尝试构建可执行文件时遇到的问题:

如何提供 Mtime_clock 和 Mtime 的实现?

0 投票
1 回答
133 浏览

ocaml - OCaml 和 dune :将小型库集成到更大的库中

我正在开发一个带有沙丘的大型图书馆。让我们称这个库L

为避免造成大混乱,dune 项目有许多较小的库:、、、A...B这些C库相互依赖。

我希望用户能够opam install L,然后访问不同的小型库,如L.AL.B

这样做的正确方法是什么?

按照@glennsl 的评论进行编辑

这是文件系统树:

l/a/dune

l/b/dune

l/a/dune-project

我找不到如何公开AB作为L.

0 投票
1 回答
306 浏览

ocaml - 使用 dune 在我的根目录中复制生成的可执行文件

假设我有一个具有以下结构的简单项目:

dune-project

dune

编译时,dune build我有一个_build具有以下结构的新目录:

所以沙丘能够从 to 创建一个符号链接main.exemyproject但我实际上想myproject加入.而不是加入_build/install/default/bin

我尝试了三件事:

  • (promote (into ../../))在我的dune文件中添加规则。它实际上是复制main.exe而不是myproject在源目录中,并且dune clean不会main.exe在根目录中删除

  • dune在我的文件中添加以下规则:

    这给了我以下错误:

  • dune在我的文件中添加以下规则:

    这给了我以下错误:

老实说,我不知道我还能做什么。我阅读了手册并找不到解决方案。我不介意我是否可以输入dune run,但由于 dune 允许构建多个可执行文件,我知道这不是一个选项。我希望能够编写dune run myproject,因为我使用的是我的可执行文件的公共名称,但沙丘找不到它。所以我只想myproject在我的根目录中,这样我就可以输入./myproject并感到高兴。

0 投票
1 回答
751 浏览

debugging - 沙丘调试 - OCaml

我知道 OCaml 调试工具(首先用 编译ocamlc -g <file>,然后运行ocamldebug <output>)以及顶层的函数调用跟踪功能(两者都在这里介绍)。但是,我似乎找不到任何关于使用dune进行调试构建的信息。这可能吗?有人可以指出我正确的方向吗?谢谢!

0 投票
1 回答
94 浏览

ocaml - OCaml dune 可以构建一个具有平面目录结构的项目吗?

假设我想使用 dune 构建一个具有平面目录结构的项目:

main.ml是主程序(入口点)。main.ml取决于utils.ml,而utils.ml反过来又取决于basics.ml。使用前缀main.ml调用函数(例如)。utils.mlUtilsUtils.example_function x y

dune问题:为了编译这个项目,我应该在文件中写什么?

到目前为止,我看到的所有沙丘示例都使用此目录结构:

在哪里my_project/dune

并且my_project/mylib/dune是:

并使用前缀(例如)main.ml调用函数。utils.mlMylib.UtilsMylib.Utils.example_function x y

我不想要这个目录结构;我不想为utils.ml和创建单独的目录basics.ml。我希望所有源文件与main.ml. 有没有办法使用沙丘做到这一点?

0 投票
1 回答
209 浏览

ocaml - OCaml dune:获取源目录的绝对路径

我有一个项目,./tests它的根目录有一个目录,其中包含数百 MB 的数据,供几个库的测试使用:

./tests我还为每个库定义了使用数据的测试,如下所示:

我现在必须以某种方式将测试数据的位置传达给我的每个tests.exe. 使用沙丘最优雅的方法是什么?

似乎沙丘将我的测试数据复制到_build其中是不必要的,因为数据永远不会改变,并且以这种方式浪费数百 MB 的空间是没有意义的。从文档来看,它似乎%{project_root}包含了我的源文件的路径,但不幸的是,变量评估到.哪个对于在 a 之后运行的测试没有用cd _build/default/src/libX,因此.不再指向项目根目录。那么有没有一种沙丘方式来指定原始源目录的路径而没有丑陋的黑客攻击?

现在,我在运行之前使用包含完整路径的环境变量,dune runtest但有没有更集成的方法?

0 投票
1 回答
52 浏览

ocaml - 从沙丘 1.1 切换到沙丘 2.0 时出现替代依赖错误

我将我的 dune 项目版本切换为在处理备用依赖项(lang dune 1.1)(lang dune 2.0)产生错误的版本。

我的沙丘文件中有一个与沙丘 1.1一起使用的傻瓜:

但是用dune 2.0产生错误

此选择分支中的文件格式必须为 vpl_domain.{name}.ml

我试图像这样删除文件名之前的路径:

这似乎让沙丘对格式感到满意,但给出了错误

未找到 vpl_domain.ko.ml 的规则

我做错了什么,这是沙丘的错误还是他们自愿做出了重大改变?

0 投票
1 回答
69 浏览

ocaml - odoc(OCaml 的文档生成器)删除“Stdlib”前缀

我正在使用odoc以及dune来为库生成文档。这是通过以下方式实现的:dune build @doc

但是,这会生成如下签名:

虽然我想要的是:

OCamldoc 过去提供了可以做到这一点的-hide选项。odoc 有类似的东西吗?如果是,如何从沙丘使用它?

Optionnaly,最好有一个指向 Stdlib 的 Format 模块的链接,但这可能要求太多了