Подтвердить что ты не робот

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

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

например.

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

4b9b3361

Ответ 1

Как описывает документация разница между include и include_lib заключается в следующем:

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

Пример:

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

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

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

Ответ 2

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

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

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

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