#ocaml #ocaml-dune
#ocaml #ocaml-dune
Вопрос:
У меня есть проект, и в ./tests
его корневом каталоге есть каталог, содержащий несколько сотен МБ данных, которые используются в тестах нескольких библиотек:
./tests
./src/lib1/dune
./src/lib1/tests/dune
./src/lib1/tests/tests.ml
./src/lib2/dune
./src/lib2/tests/dune
./src/lib2/tests/tests.ml
...
Я также определил тесты, которые используют данные ./tests
для каждой библиотеки следующим образом:
(rule
(alias runtest)
(action (run ./tests/tests.exe)))
Теперь мне нужно каким-то образом сообщить местоположение тестовых данных каждому из моих tests.exe
. Какой самый элегантный способ сделать это с помощью dune?
Кажется, что dune копирует мои тестовые данные, в _build
которые нет необходимости, потому что данные никогда не меняются, и нет смысла тратить таким образом несколько сотен МБ пространства. Из документации кажется, что %{project_root}
это будет содержать путь к моим исходным файлам, но, к сожалению, переменная вычисляет .
значение, которое бесполезно для тестов, которые выполняются после a cd _build/default/src/libX
, и, следовательно .
, больше не указывает на корень проекта. Итак, есть ли dune-способ указать путь к исходному исходному каталогу без уродливых взломов?
Прямо сейчас я использую переменную среды, содержащую полный путь перед запуском dune runtest
, но есть ли более интегрированный способ?
Комментарии:
1. Это кажется актуальным: github.com/ocaml/dune/issues/2856
Ответ №1:
Я сам не пробовал, но похоже data_only_dirs
, что строфа — это то, что вы ищете: https://dune.readthedocs.io/en/stable/dune-files.html#data-only-dirs-since-1-6
Комментарии:
1. Но как мои скрипты узнают, где находится каталог данных? Я каким-то образом должен передавать им эту информацию, когда dune их запускает.