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не добавляется автоматически, если не найден в проекте.

Другие вопросы по тегам