“include_lib”和“include”有什么区别?
E.g。
-include_lib("eunit/include/eunit.hrl")
答案 0 :(得分:28)
文档描述the difference between include and include_lib的方式是:
include_lib
与include
类似,但不应指出绝对文件。相反,第一个路径组件(可能在变量替换之后)被假定为应用程序的名称。示例:
-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
包含在内。