使用 dune 编译时包含嵌套在子目录中的 mly 文件
Include mly files nested in subdirectories when compiling with dune
假设我有以下目录:
.
├── dune-project
├── myproj.opam
└── src
├── dune
├── module1.ml
├── parser1
│ └── file1.ml
└── parser2
└── file2.ml
因为我希望所有内容都在同一个库中,所以我有以下内容:
src/dune:
(include_subdirs unqualified)
(library
(name myproj)
(modules module1 file1 file2)
)
而且编译得很好。
现在,我的 file1 和 file2 实际上是 mly 文件,所以我有这个:
.
├── dune-project
├── myproj.opam
└── src
├── dune
├── module1.ml
├── parser1
│ └── parser1.mly
└── parser2
└── parser2.mly
如果我尝试编译(通过 dune 文件中的解析器 (1|2) 更改文件 (1|2)),我会遇到以下错误:
❯ dune build
File "src/dune", line 5, characters 26-33:
5 | (modules module1 parser1 parser2 )
^^^^^^^
Error: Module Parser2 doesn't exist.
我编辑我的沙丘文件:
(include_subdirs unqualified)
(menhir
(modules parser1 parser2)
)
(library
(name myproj)
(modules module1 parser1 parser2 )
)
现在有两个错误:
❯ dune build
File "src/dune", line 3, characters 0-36:
3 | (menhir
4 | (modules parser1 parser2)
5 | )
Error: No rule found for src/parser1.mly
File "src/dune", line 3, characters 0-36:
3 | (menhir
4 | (modules parser1 parser2)
5 | )
Error: No rule found for src/parser2.mly
好的,然后我在 parser(1|2) 目录中添加两个沙丘文件:
(menhir
(modules parser(1|2))
)
[编辑] 看起来我错过了什么,但这实际上工作得很好
现在我遇到了和以前一样的错误:
❯ dune build
File "src/dune", line 5, characters 26-33:
5 | (modules module1 parser1 parser2 )
^^^^^^^
Error: Module Parser2 doesn't exist.
我是不是漏掉了一些可以取悦沙丘的东西? (如果我有 .mll 文件,我也会遇到同样的问题)
竖石stanza doesn't work with subdirs。这是一个尚未修复的错误1。有几个解决方法,比如将沙丘文件添加到您拥有解析器的文件夹中(我自己没有检查)。但我建议将解析器拆分到单独的库中或将它们移动到 src
文件夹中。前者是首选,特别是从那时起你就不需要写 modules
节了。
1)截至 2022 年 1 月
假设我有以下目录:
.
├── dune-project
├── myproj.opam
└── src
├── dune
├── module1.ml
├── parser1
│ └── file1.ml
└── parser2
└── file2.ml
因为我希望所有内容都在同一个库中,所以我有以下内容:
src/dune:
(include_subdirs unqualified)
(library
(name myproj)
(modules module1 file1 file2)
)
而且编译得很好。
现在,我的 file1 和 file2 实际上是 mly 文件,所以我有这个:
.
├── dune-project
├── myproj.opam
└── src
├── dune
├── module1.ml
├── parser1
│ └── parser1.mly
└── parser2
└── parser2.mly
如果我尝试编译(通过 dune 文件中的解析器 (1|2) 更改文件 (1|2)),我会遇到以下错误:
❯ dune build
File "src/dune", line 5, characters 26-33:
5 | (modules module1 parser1 parser2 )
^^^^^^^
Error: Module Parser2 doesn't exist.
我编辑我的沙丘文件:
(include_subdirs unqualified)
(menhir
(modules parser1 parser2)
)
(library
(name myproj)
(modules module1 parser1 parser2 )
)
现在有两个错误:
❯ dune build
File "src/dune", line 3, characters 0-36:
3 | (menhir
4 | (modules parser1 parser2)
5 | )
Error: No rule found for src/parser1.mly
File "src/dune", line 3, characters 0-36:
3 | (menhir
4 | (modules parser1 parser2)
5 | )
Error: No rule found for src/parser2.mly
好的,然后我在 parser(1|2) 目录中添加两个沙丘文件:
(menhir
(modules parser(1|2))
)
[编辑] 看起来我错过了什么,但这实际上工作得很好
现在我遇到了和以前一样的错误:
❯ dune build
File "src/dune", line 5, characters 26-33:
5 | (modules module1 parser1 parser2 )
^^^^^^^
Error: Module Parser2 doesn't exist.
我是不是漏掉了一些可以取悦沙丘的东西? (如果我有 .mll 文件,我也会遇到同样的问题)
竖石stanza doesn't work with subdirs。这是一个尚未修复的错误1。有几个解决方法,比如将沙丘文件添加到您拥有解析器的文件夹中(我自己没有检查)。但我建议将解析器拆分到单独的库中或将它们移动到 src
文件夹中。前者是首选,特别是从那时起你就不需要写 modules
节了。
1)截至 2022 年 1 月