Erlang: в чем разница между «include_lib» и «include»? - PullRequest
32 голосов
/ 04 декабря 2009

В чем разница между "include_lib" и "include"?

* 1003 Е.Г. *

-include_lib("eunit/include/eunit.hrl")

Ответы [ 2 ]

28 голосов
/ 04 декабря 2009

Способ, которым описана документация разница между include и include_lib :

include_lib аналогично include, но не должно указывать на абсолютный файл. Вместо этого первым компонентом пути (возможно, после подстановки переменной) считается имя приложения.

Пример:

-include_lib("kernel/include/file.hrl").

Сервер кода использует код: lib_dir (ядро), чтобы найти каталог текущей (последней) версии ядра, а затем в подкаталоге include выполняется поиск файла file.hrl.

Итак, в вашем примере вам не нужно указывать версию eunit, которую вы включаете, вы включаете последний eunit.hrl из eunit: s, который существует в пути вашей библиотеки.

13 голосов
/ 17 сентября 2013

Одно отличие, которое на первый взгляд неочевидно, заключается в том, что -include и -include_lib используют различный набор путей при поиске заголовочных файлов. -include_lib фактически использует путь кода, а не путь файла заголовка.

Следовательно, флаг erlc ожидает добавления пути к поисковому пути -include: -I; флаг для -include_lib равен -pa / -pz.

Уже упоминалось, что использование -include_lib избавляет нас от указания (и, следовательно, привязки) модуля к конкретной версии библиотеки.

Кроме того, существует соглашение, что внутренние заголовки хранятся в подкаталоге src/ проекта и включаются с использованием -include. Внешние заголовки (предназначенные для использования другими библиотеками / проектами) файлы хранятся в include/ и включаются с использованием -include_lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...