“include_lib”和“include”有什么区别?Erlang:“include_lib”和“include”有什么区别?
E.g.
-include_lib("eunit/include/eunit.hrl")
“include_lib”和“include”有什么区别?Erlang:“include_lib”和“include”有什么区别?
E.g.
-include_lib("eunit/include/eunit.hrl")
文档描述the difference between include and include_lib的方法是:
include_lib
类似于include
,但不应该指出一个绝对的文件。相反,第一个路径组件(可能在变量替换之后)被假定为应用程序的名称。例子:
-include_lib("kernel/include/file.hrl").
代码服务器使用代码:LIB_DIR(内核),找到核心的电流(最新)版本的目录,然后将子目录包括中搜索文件文件.hrl。
所以在你的例子中,你不需要指出你包含的eunit版本,你需要包括存在于你的库路径中的eunit:s的最新版本eunit.hrl。
首先不明显的一个差异是-include
和-include_lib
在查找头文件时使用了一组不同的路径。 -include_lib
实际上使用了代码路径,而不是头文件路径。
因此,标志erlc
预计添加路径到-include
搜索路径是-I
; -include_lib
的标志是-pa
/-pz
。
已经提到的事实是,使用-include_lib
可以避免我们将模块指定(并因此绑定)到特定的库版本。
此外,还有一个约定,内部接头存储在src/
子目录一个项目内,并使用-include
包括在内。 外部文件头(打算供其他库/项目使用)文件存储在include/
中,并使用-include_lib
包含在内。
我相信你也可以使用include_lib来包含你想从特定版本的已安装应用程序中获得的文件。 – 2009-12-05 00:45:01