如何解决用沙丘将生成的可执行文件复制到我的根目录中
假设我有一个具有以下结构的简单项目:
.
├── 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
-
在我的
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
,因为我使用的是可执行文件的公用名,但dune找不到它。所以我只想在根目录中放入myproject
,这样我就可以键入./myproject
并感到高兴了。
解决方法
您知道dune exec
吗?我相信这就是您所说的dune run
。
从项目的根开始,您可以执行dune exec ./bin/main.exe
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。