OCaml/dune构建中的未绑定模块

OCaml/dune构建中的未绑定模块,ocaml,opam,ocaml-dune,Ocaml,Opam,Ocaml Dune,我第一次尝试使用OCaml,并尝试一起构建几个文件 当我跑步时: dune build bin/main.exe 我得到: 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-p

我第一次尝试使用OCaml,并尝试一起构建几个文件

当我跑步时:

dune build bin/main.exe
我得到:

    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
这是我的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);
在lib/inner/rule.ml中,包含:

let add x y = x + y
let sub x y = x - y

因此,我认为我需要以某种方式将rule.ml文件导入Dune中的
bin/main.ml
文件?

,目前默认情况是不同目录中的模块彼此不可见。这由
(包含子目录号)
节()控制。使用此设置,要使模块彼此可见,需要在每个子目录中放置一个包含正确内容的
dune
文件。如果您查看Dune项目本身是如何完成的(),您的目录结构将如下所示:

myproj/
  bin/
    dune
    main.ml
  lib/
    dune
    inner/
      dune
      rule.ml
各种
dune
文件应根据需要包含正确的
(库…
()或
(可执行…
())节


编辑:完成上述操作后,您还需要通过完整的“路径”引用
规则
模块,即
Lib.internal.Rule

,因此我将在bin/main.ml right?@AlexanderMills中调用
open Lib.internal.Rule
,通常建议避免
打开
模块,而是按名称引用它们。如果名称较长,建议在尽可能小的范围内别名较短的名称,例如,
let()=let module Rule=Lib.Inner.Rule in…
谢谢,我在
bin/dune
文件中遇到问题。。我有这个
(executable(name main)(libraries lib))
,但我认为我需要参考
内部的
库,好了,我用
(executable(name main)(libraries lib inner)工作了
(executable(name main)(libraries lib inner))
谢谢