Erlang:“include_lib”和“include”有什么区别?

时间:2009-12-04 16:02:51

标签: erlang

“include_lib”和“include”有什么区别?

E.g。

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

2 个答案:

答案 0 :(得分:28)

文档描述the difference between include and include_lib的方式是:

  

include_libinclude类似,但不应指出绝对文件。相反,第一个路径组件(可能在变量替换之后)被假定为应用程序的名称。

     

示例:

     

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

     

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

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

答案 1 :(得分:13)

一开始并不明显的一个区别是-include-include_lib在查找头文件时使用不同的路径集。 -include_lib实际上使用代码路径,而不是头文件路径。

因此,标记erlc期望添加-include搜索路径的路径为-I; -include_lib的标记为-pa / -pz

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

此外,内部标题存储在项目的src/子目录中并使用-include包含的约定。 外部标头(供其他图书馆/项目使用)文件存储在include/中,并使用-include_lib包含在内。