Ale*_*lls 1 ocaml opam ocaml-dune
我第一次尝试OCaml并试图一起构建几个文件.
当我跑:
dune build bin/main.exe
Run Code Online (Sandbox Code Playgroud)
我正进入(状态:
ocamlc bin/.main.eobjs/main.{cmi,cmo,cmt} (exit 2)
(cd _build/default && /usr/bin/ocamlc.opt -w @a-4-29-40-41-42-44-45-48-58-59-60-40 -strict-sequence -strict-formats -short-paths -keep-locs -g -bin-annot -I bin/.main.eobjs -I lib/.lib.objs -no-alias-deps -opaque -o bin/.main.eobjs/main.cmo -c -impl bin/main.ml)
File "bin/main.ml", line 10, characters 17-25:
Error: Unbound module Rule
Run Code Online (Sandbox Code Playgroud)
这是我的bin/main.ml文件:
open Lib
let () =
let result = Math.add 2 3 in
print_endline (string_of_int result);
let result = Math.sub 3 1 in
print_endline (string_of_int result);
let result = Zoom.barf 3 1 in
print_endline (string_of_int result);
let result = Rule.add 3 1 in
print_endline (string_of_int result);
Run Code Online (Sandbox Code Playgroud)
在lib/inner/rule.ml中,包含:
let add x y = x + y
let sub x y = x - y
Run Code Online (Sandbox Code Playgroud)
所以我想我需要在文件中以某种方式导入rule.ml bin/main.ml文件?
在Dune中,当前默认是不同目录中的模块彼此不可见.这由(include_subdirs no)节(https://dune.readthedocs.io/en/latest/dune-files.html#include-subdirs)控制.使用此设置,要使模块彼此可见,您需要dune在每个子目录中放置一个包含正确内容的文件.如果你看看Dune项目本身是如何做到的(https://github.com/ocaml/dune),你的目录结构将如下所示:
myproj/
bin/
dune
main.ml
lib/
dune
inner/
dune
rule.ml
Run Code Online (Sandbox Code Playgroud)
各种dune文件应包含正确的(library ...)(https://dune.readthedocs.io/en/latest/dune-files.html#library)或(executable ...)(https://dune.readthedocs.io/en/latest/dune-files. html#executable)节,根据需要.
编辑:执行上述操作后,您还需要Rule通过完整的"路径" 来引用模块,即Lib.Inner.Rule.
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |