2

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

my_project/
├── dune
├── basics.ml
├── basics.mli
├── utils.ml
├── utils.mli
└── main.ml

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

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

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

my_project/
├── dune
├── main.ml
└── mylib
    ├── dune
    ├── basics.ml
    ├── basics.mli
    ├── utils.ml
    └── utils.mli

在哪里my_project/dune

(executable
  (name main)
  (libraries mylib))

并且my_project/mylib/dune是:

(library (name mylib))

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

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

4

1 回答 1

2

您必须列出每个库/可执行文件的模块才能使其工作:

(executable
  (name main)
  (modules main)
  (libraries mylib))

(library
  (name mylib)
  (modules utils basics))

或者您可以将所有内容放入可执行文件中:

(executable
  (name main)
  (modules basics main utils)) ; and this line is not needed anymore
于 2021-01-27T16:31:12.500 回答