Как включить файлы.hrl в несколько модулей rebar3
У меня есть несколько каталогов модулей. Для каждого модуля у меня есть include
(содержащий *.hrl
файлы) и src
(содержащий *.erl
файлы) папка разделена. Как я могу поделиться *.hrl
файл из модуля в другой, не дублируя их?
С арматурой я добавил {erl_opts, [{i, "folderContainsIncludeFile"}]}
и это сработало.
Но с rebar3 компиляция не удалась, сказав, что не могу найти включаемый файл "include/xx.hrl"
1 ответ
Я так понимаю, у вас нет зонтичного проекта, у вас просто несколько каталогов на одном уровне, каждый со своим проектом, управляемым с помощью rebar3. Что-то вроде:
root_folder
|- project1
| |- src
| |- include
| | `- one.hrl
| `- rebar.config
|- project2
| |- src
| | `- two.erl
| |- include
| `- rebar.config
…
И вы хотите включить one.hrl
в two.erl
,
Если это так, вы должны рассмотреть один из следующих вариантов:
A. Переход к структуре зонтичного проекта, как...
root_folder
|- rebar.config <<<<<<<< notice this file is here now
`- apps
|- project1
| |- src
| `- include
| `- one.hrl
|- project2
| |- src
| | `- two.erl
| `- include
…
Б. Использование отдельных репозиториев для каждого проекта и настройка их как зависимостей друг от друга. Структура похожа на ту, что у вас есть, но теперь вы должны добавить deps
в rebar.config's. Например, в нашем примере вы должны добавить следующую строку в rebar.config проекта2:
{deps, [project1]}.
(если вам удастся опубликовать project1 в hex.pm)
C. Правильная настройка $ERL_LIBS
так что он включает пути, по которым ваши приложения создаются с помощью rebar3. Что-то вроде…
ERL_LIBS=$ERL_LIBS:/path/to/root_folder/project1/_build/lib:/path/to/root_folder/project2/_build/lib:…
Надеюсь это поможет:)