4

假设我有一个具有以下结构的简单项目:

.
├── 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.exemyproject但我实际上想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并感到高兴。

4

1 回答 1

2

你知道dune exec吗?dune run我相信这就是你所说的。

从项目的根目录,您可以执行dune exec ./bin/main.exe.

于 2020-10-15T15:02:20.450 回答