Erlang:"include_lib"和"include"有什么区别?

jld*_*ont 32 erlang

"include_lib"和"include"有什么区别?

例如

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

Chr*_*ian 29

文档描述include和include_lib之间区别的方式是:

include_lib类似于include,但不应指出绝对文件.相反,假设第一个路径组件(可能在变量替换之后)是应用程序的名称.

例:

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

代码服务器使用代码:lib_dir(内核)来查找当前(最新)版本的内核的目录,然后搜索子目录include以查找文件file.hrl.

因此,在您的示例中,您不需要指出您包含的eunit版本,您将包含库路径中存在的eunit:s的最新eunit.hrl.

  • 我相信您也可以使用include_lib从已安装应用程序的特定版本中包含所需的文件. (2认同)

ers*_*zcz 13

一个区别是不明显起初是-include-include_lib寻找头文件时,使用一组不同的路径.-include_lib实际上使用代码路径,而不是头文件路径.

因此,该标志erlc期望添加一条到-include搜索路径的路径-I; -include_lib-pa/ 的标志-pz.

已经提到的事实是使用使-include_lib我们无法指定(并因此将其绑定)模块到特定的库版本.

此外,还有一个约定,即内部头文件存储在src/项目的子目录中并包含在内-include.外部标题(供其他库/项目使用)文件存储在其中include/并包含在内-include_lib.