OCaml: ошибка сборки дюны после запуска `dune init exec`
Я новичок в OCaml и следил за учебным пособием по настройке среды разработки. Затем я попробовал пример helloworld с дюной и OCaml, но обнаружил следующую ошибку:
$ dune init exe helloworld
Success: initialized executable component named helloworld
$ dune build
Error: I cannot find the root of the current workspace/project.
If you would like to create a new dune project, you can type:
dune init project NAME
Otherwise, please make sure to run dune inside an existing project or
workspace. For more information about how dune identifies the root of the
current workspace/project, please refer to
https://dune.readthedocs.io/en/stable/usage.html#finding-the-root
Структура каталога:
.
├── _build
│ └── log
├── dune
└── helloworld.ml
дюна: 3.0.2
окамл: 4.11.1
1 ответ
Вы можете исправить эту ситуацию, добавив в корень вашего проекта файл, заполненный этой строкой:
(lang dune 3.0)
Однако, согласно документации,
dune init exec
не предназначен для создания проектов: он только создает шаблон для исполняемого компонента в существующем проекте (см.
dune init --help
или руководство по dune cli для получения подробной информации).
Чтобы инициализировать проект, вы должны запустить
dune init proj helloworld
Это также создаст файл шаблона вместе с рекомендуемой структурой файла проекта.
ПРИМЕЧАНИЕ. До версии 3.0
.dune build
создал бы файл для вас, если бы он отсутствовал:
❯ dune init exe helloworld
Success: initialized executable component named helloworld
❯ ls
_build dune helloworld.ml
❯ dune build
Info: Creating file dune-project with this contents:
| (lang dune 2.9)
❯ ls
_build dune dune-project helloworld.ml
Однако, начиная с дюны 3.0,
dune-project
не добавляется автоматически, если не найден в проекте.