问题标签 [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.
ocaml - Opam 可以安装最新的软件包并告诉'Already up-to-date'?
我想opam
用来安装版本为或更高dune
版本的软件包。1.11.0
但它告诉我Already up-to-date
while dune
is still 1.2.1
。
粘贴我的操作:
接着:
但是dune
没有升级..它仍然1.2.1
..我怎样才能安装我想要的更高版本?
opam --version
是1.2.2
dune --version
是1.2.1
gtk - 使用沙丘构建 lablgtk hello world 的正确设置是什么?
有人可以帮我设置 OCaml 项目吗?
我想使用沙丘创建一个构建环境,因为我正在开发一个 gui 应用程序,所以我想从这里构建 lablgtk 示例:GTK Hello World! 我可以使用链接中的说明来构建它,但我想使用沙丘来构建它,这目前不起作用。我收到一个 cmi 文件丢失的错误。
命令行界面中的输出:
来自 VScode 中 Merlin 的 Infro
输出与dune build main.exe --verbose
ocaml - 没有为以下模块提供实现(Mtime_clock,Mtime)
在我的项目中,我使用的是按此处所述安装的 OCanren 包:https ://github.com/JetBrains-Research/OCanren#Installation 。
我有一个test.ml
使用 OCanren 的文件:
和dune
同一目录中的一个文件:
这是我尝试构建可执行文件时遇到的问题:
如何提供 Mtime_clock 和 Mtime 的实现?
ocaml - OCaml 和 dune :将小型库集成到更大的库中
我正在开发一个带有沙丘的大型图书馆。让我们称这个库L
。
为避免造成大混乱,dune 项目有许多较小的库:、、、A
...B
这些C
库相互依赖。
我希望用户能够opam install L
,然后访问不同的小型库,如L.A
,等。L.B
这样做的正确方法是什么?
按照@glennsl 的评论进行编辑:
这是文件系统树:
在l/a/dune
:
在l/b/dune
:
在l/a/dune-project
:
我找不到如何公开A
和B
作为L
.
ocaml - 使用 dune 在我的根目录中复制生成的可执行文件
假设我有一个具有以下结构的简单项目:
dune-project
dune
编译时,dune build
我有一个_build
具有以下结构的新目录:
所以沙丘能够从 to 创建一个符号链接main.exe
,myproject
但我实际上想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
并感到高兴。
ocaml - OCaml dune 可以构建一个具有平面目录结构的项目吗?
假设我想使用 dune 构建一个具有平面目录结构的项目:
main.ml
是主程序(入口点)。main.ml
取决于utils.ml
,而utils.ml
反过来又取决于basics.ml
。使用前缀main.ml
调用函数(例如)。utils.ml
Utils
Utils.example_function x y
dune
问题:为了编译这个项目,我应该在文件中写什么?
到目前为止,我看到的所有沙丘示例都使用此目录结构:
在哪里my_project/dune
:
并且my_project/mylib/dune
是:
并使用前缀(例如)main.ml
调用函数。utils.ml
Mylib.Utils
Mylib.Utils.example_function x y
我不想要这个目录结构;我不想为utils.ml
和创建单独的目录basics.ml
。我希望所有源文件与main.ml
. 有没有办法使用沙丘做到这一点?
ocaml - OCaml dune:获取源目录的绝对路径
我有一个项目,./tests
它的根目录有一个目录,其中包含数百 MB 的数据,供几个库的测试使用:
./tests
我还为每个库定义了使用数据的测试,如下所示:
我现在必须以某种方式将测试数据的位置传达给我的每个tests.exe
. 使用沙丘最优雅的方法是什么?
似乎沙丘将我的测试数据复制到_build
其中是不必要的,因为数据永远不会改变,并且以这种方式浪费数百 MB 的空间是没有意义的。从文档来看,它似乎%{project_root}
包含了我的源文件的路径,但不幸的是,变量评估到.
哪个对于在 a 之后运行的测试没有用cd _build/default/src/libX
,因此.
不再指向项目根目录。那么有没有一种沙丘方式来指定原始源目录的路径而没有丑陋的黑客攻击?
现在,我在运行之前使用包含完整路径的环境变量,dune runtest
但有没有更集成的方法?
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 的规则
我做错了什么,这是沙丘的错误还是他们自愿做出了重大改变?