tutorial telecomunicaciones programacion imagenes erlang

telecomunicaciones - erlang tutorial



Erlang: ¿cuál es la diferencia entre "include_lib" y "include"? (2)

¿Cuál es la diferencia entre "include_lib" e "include"?

P.ej

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


La forma en que la documentación describe la diferencia entre include y include_lib es:

include_lib es similar a include , pero no debe señalar un archivo absoluto. En cambio, se asume que el primer componente de camino (posiblemente después de la sustitución de la variable) es el nombre de una aplicación.

Ejemplo:

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

El servidor de códigos usa el código: lib_dir (kernel) para encontrar el directorio de la versión actual (más reciente) de Kernel, y luego se incluye el subdirectorio para buscar el archivo file.hrl.

Por lo tanto, en su ejemplo, no necesita indicar la versión de eunit que incluye, está incluyendo la última eunit.hrl de la unidad que existe en la ruta de su biblioteca.


Una diferencia que no es obvia al principio es que -include y -include_lib usan un conjunto diferente de rutas al buscar archivos de encabezado. -include_lib de hecho usa la ruta del código, no la ruta del archivo del encabezado.

Por lo tanto, el indicador erlc espera agregar una ruta a la -include búsqueda -include es -I ; la bandera para -include_lib es -pa / -pz .

Ya se mencionó el hecho de que el uso de -include_lib nos evita especificar (y por lo tanto vincular) el módulo a una versión de biblioteca específica.

Además, existe una convención de que los encabezados internos se almacenan dentro del subdirectorio src/ de un proyecto y se incluyen mediante -include . Los archivos de encabezados externos (destinados a ser utilizados por otras bibliotecas / proyectos) se almacenan en include/ y se incluyen usando -include_lib .