假设我有一个具有以下结构的简单项目:
.
├── dune-project
└── src
└── bin
├── dune
└── main.ml
dune-project
(lang dune 2.7)
(name myproject)
(package
(name myproject)
(synopsis "myproject")
(description "Basic project")
)
dune
(executable
(name main)
(public_name myproject)
)
编译时,dune build
我有一个_build
具有以下结构的新目录:
_build
├── default
│ ├── dune-project
│ ├── META.myproject
│ ├── myproject.dune-package
│ ├── myproject.install
│ └── src
│ └── bin
│ ├── dune
│ ├── main.exe
│ └── main.ml
├── install
│ └── default
│ ├── bin
│ │ └── myproject -> ../../../default/src/bin/main.exe
│ └── lib
│ └── myproject
│ ├── dune-package -> ../../../../default/myproject.dune-package
│ └── META -> ../../../../default/META.myproject
└── log
所以沙丘能够从 to 创建一个符号链接main.exe
,myproject
但我实际上想myproject
加入.
而不是加入_build/install/default/bin
我尝试了三件事:
(promote (into ../../))
在我的dune
文件中添加规则。它实际上是复制main.exe
而不是myproject
在源目录中,并且dune clean
不会main.exe
在根目录中删除dune
在我的文件中添加以下规则:(rule (target myproject) (deps ../../myproject) (action (copy %{target} %{deps})) )
这给了我以下错误:
❯ dune build File "src/bin/dune", line 6, characters 0-88: 6 | (rule 7 | (target myproject) 8 | (deps ../../myproject) 9 | (action (copy %{target} %{deps})) 10 | ) Error: No rule found for myproject Error: Dependency cycle between the following files: _build/default/src/bin/myproject Done: 0/0 (jobs: 0)%
dune
在我的文件中添加以下规则:(rule (target main.exe) (deps ../../myproject) (action (copy %{target} %{deps})) )
这给了我以下错误:
❯ dune build Error: Multiple rules generated for _build/default/src/bin/main.exe: - src/bin/dune:6 - src/bin/dune:2 Done: 0/0 (jobs: 0)%
老实说,我不知道我还能做什么。我阅读了手册并找不到解决方案。我不介意我是否可以输入dune run
,但由于 dune 允许构建多个可执行文件,我知道这不是一个选项。我希望能够编写dune run myproject
,因为我使用的是我的可执行文件的公共名称,但沙丘找不到它。所以我只想myproject
在我的根目录中,这样我就可以输入./myproject
并感到高兴。