Erlang里的文件包含

Erlang中包含文件的语法有两个:

  • -include(File).
  • -include_lib(File).

它们其实是预编译指令。其中File是一个字符串,表示被包含文件的文件名相对路径或绝对路径。

在Erlang中,一般需要被公用的记录和宏定义都放在被包含文件里,文件名后缀名为.hrl。

File可以使用操作系统的环境变量作为路径开头部分。比如:
-include(“\$PROJ_ROOT/my_records.hrl”).
Erlang将使用os:getenv(PROJ_ROOT)来获得操作系统的环境变量PROJ_ROOT的值,并替换”\$PROJ_ROOT/my_records.hrl”中的\$PROJ_ROOT。

如果File是绝对路径,则Erlang就按绝对路径来查找文件。如果File不是绝对路径,则Erlang按如下顺序来查找文件:

  • 当前工作目录
  • 编译后的模块所在目录
  • 通过include选项给出的目录

include_lib不指定绝对路径。路径的第一部分被Erlang虚拟机认为是一个应用的名字。例如:

-include_lib(“kernel/include/file.hrl”).

Erlang使用code:lib_dir(kernel)来获得kernel应用的绝对路径,然后替换”kernel/include/file.hrl”里的kernel,最后得到绝对路径。