2009-12-04 14 views

Respuesta

27

La forma en que la documentación describe the difference between include and include_lib es:

include_lib es similar a include, pero no debe señalar un archivo absoluta. 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ódigo utiliza código: lib_dir (kernel) para encontrar el directorio de la versión actual (última) del kernel, y luego el subdirectorio include se busca en el archivo archivo .hrl.

Así que en su ejemplo, ya no tienes que señalar la versión de eunit que incluya, se está incluyendo la última eunit.hrl del eunit: s que existe en su ruta de bibliotecas.

+2

Creo que también puede usar include_lib para incluir archivos que desee desde una versión específica de una aplicación instalada. –

10

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

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

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

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

Cuestiones relacionadas