问题描述
.
├── 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
因此,沙丘能够创建从main.exe
到myproject
的符号链接,但我实际上希望myproject
位于.
而不位于_build/install/default/bin
>
我尝试了三件事:
-
在我的
(promote (into ../../))
文件中添加规则dune
。实际上,它会在源目录中复制main.exe
而不是myproject
,并且dune clean
不会在根目录中删除main.exe
-
(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)%
-
(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
,因为我使用的是可执行文件的公用名,但dune找不到它。所以我只想在根目录中放入myproject
,这样我就可以键入./myproject
并感到高兴了。
解决方法
您知道dune exec
吗?我相信这就是您所说的dune run
。
从项目的根开始,您可以执行dune exec ./bin/main.exe
。