关于 .cma 文件的沙丘行为
Dune behaviour regarding .cma files
我在尝试使用 dune
实用程序创建 .cma
文件(库)时遇到了一些问题。我有以下项目树:
.
├── _build
│ ├── default
│ │ ├── dune
│ │ └── lib
│ │ ├── a.a
│ │ ├── a.cma
│ │ ├── a.cmxa
│ │ ├── a.cmxs
│ │ ├── a.ml
│ │ └── dune
│ └── log
├── dune
├── dune-project
└── lib
├── a.ml
└── dune
其中a.ml
声明了一个非常简单的函数f
,作为例子。当我直接 运行 ocamlc -o a.cma -a a.ml
,然后启动 utop a.cma
,我可以根据需要执行以下命令:
utop # A.f;;
- : int -> int = <fun>
另一方面,在使用一次 dune build
(生成 _build
目录及其子目录)后,我得到的 _build/default/lib/a.cma
文件占用了 10 倍much space 作为手动生成的,更重要的是,它不起作用。 utop _build/default/lib/a.cma
和 cd _build/default/lib; utop a.cma
两个命令都不成功,我无法使用模块 A
:
utop # A.f;;
Line 1, characters 0-3:
Error: Unbound module A
我知道 dune utop
命令,但是如果我想 export/share 我的库在其他地方,而 dune
没有安装怎么办?我应该做些什么?我使用 dune
的方式有误吗?提前谢谢你
PS: 文件内容:
lib/dune
(library
(name a))
您需要使 .a.objs/byte
中的字节码目标文件可见。例如:
#directory ".a.objs/byte"
(图书馆用户照常安装这些文件)
另请注意,dune 默认处于包装模式:库 Lib
中的模块 M
可作为 Lib.M
访问,除非用户使用与整个图书馆同名Lib
。
我在尝试使用 dune
实用程序创建 .cma
文件(库)时遇到了一些问题。我有以下项目树:
.
├── _build
│ ├── default
│ │ ├── dune
│ │ └── lib
│ │ ├── a.a
│ │ ├── a.cma
│ │ ├── a.cmxa
│ │ ├── a.cmxs
│ │ ├── a.ml
│ │ └── dune
│ └── log
├── dune
├── dune-project
└── lib
├── a.ml
└── dune
其中a.ml
声明了一个非常简单的函数f
,作为例子。当我直接 运行 ocamlc -o a.cma -a a.ml
,然后启动 utop a.cma
,我可以根据需要执行以下命令:
utop # A.f;;
- : int -> int = <fun>
另一方面,在使用一次 dune build
(生成 _build
目录及其子目录)后,我得到的 _build/default/lib/a.cma
文件占用了 10 倍much space 作为手动生成的,更重要的是,它不起作用。 utop _build/default/lib/a.cma
和 cd _build/default/lib; utop a.cma
两个命令都不成功,我无法使用模块 A
:
utop # A.f;;
Line 1, characters 0-3:
Error: Unbound module A
我知道 dune utop
命令,但是如果我想 export/share 我的库在其他地方,而 dune
没有安装怎么办?我应该做些什么?我使用 dune
的方式有误吗?提前谢谢你
PS: 文件内容:
lib/dune
(library
(name a))
您需要使 .a.objs/byte
中的字节码目标文件可见。例如:
#directory ".a.objs/byte"
(图书馆用户照常安装这些文件)
另请注意,dune 默认处于包装模式:库 Lib
中的模块 M
可作为 Lib.M
访问,除非用户使用与整个图书馆同名Lib
。