先来段抄的,来自
http://blog.sina.com.cn/s/blog_96b8a15401012ezu.html
Erlang有个类似Makefile的文件Emakefile负责编译erl程序,
其中Modules是一个atom,或者是一个atom的列表。
这些atom
可以是一个模块名,如file1;
可以是别的目录中的模块名,如../foo/file3;
也可以是通过通配符匹配的一系列模块名,如file*;
还可以是上述atom的列表,如['file*', '../foo/file3', 'File4']。
Options是compiler命令的配置参数,具体参数可以 查看文档
一个Emakefile的例子
shell命令
make时将查看输出目录下有没有相关的编译文件,如果没有则进行编译;
如果有则检查文件时间,比较后决定是否要进一步编译;
如果是最新修改的源文件,则进行编译。
ps:
在erl shell中输入命令
1.然后学习一些源码时,发现某个Emakefile中的Options列表中出现了{d,Macro},
{d,Macro,Value}的使用
Erlang有个类似Makefile的文件Emakefile负责编译erl程序,
格式是
Erlang代码
- {Modules, Options}.
其中Modules是一个atom,或者是一个atom的列表。
这些atom
可以是一个模块名,如file1;
可以是别的目录中的模块名,如../foo/file3;
也可以是通过通配符匹配的一系列模块名,如file*;
还可以是上述atom的列表,如['file*', '../foo/file3', 'File4']。
Options是compiler命令的配置参数,具体参数可以 查看文档
一个Emakefile的例子
Erlang代码
- {'src/*',
- [debug_info,
- {i,"include"},
- {outdir,"ebin"}
- ]}.
shell命令
Shell代码
- erl -make
make时将查看输出目录下有没有相关的编译文件,如果没有则进行编译;
如果有则检查文件时间,比较后决定是否要进一步编译;
如果是最新修改的源文件,则进行编译。
ps:
在erl shell中输入命令
Erlang shell代码
- make :all().
Erlang shell代码
- make:all([load]).
问题来源:
查看compiler-4.8.2 文档关于Options的参数说明,如下:
{d,Macro}
{d,Macro,Value}
Defines a macro Macro to have the value Value. Macro is of type atom, and Value can be any term. The
default Value is true.
{d,Macro,Value}
Defines a macro Macro to have the value Value. Macro is of type atom, and Value can be any term. The
default Value is true.
翻译:
选项{d,Macro}或者{d,Macro,Value}
定义一个名为Macro的宏,对应的值为Value.
Macro呢,是一个原子类型,然后呢,Value,可以为任何erlang中的项式。Value的默认值为true(那么,上面中的
{d,Macro}等价于{d,Macro,true} )
那么
总结下就是,
1.在Emakefile的{Modules, Options} 的Options的列表中,出现{d,Debug}等价与 {debug,Debug,true},即定义了一个全局的宏,等价于-define Debug true。然后全部源码都可以用Debug这个宏了
2.erlang中如何使用Emakefile,需要查阅compiler-4.8.2(自己目前在用R15B版本) 中的compile:file/1,2以及查阅
tools-2.6.8中关于erl的-make选项的相关内容
3.有待补充