Как включить файлы.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:…

Надеюсь это поможет:)

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