erlang里的make模块提供了类似UNIX中make命令的功能,官方参数文档:
http://www.erlang.org/doc/man/make.html
make.erl模块中提供all/0、all/1、files/1、files/2方法进行编译,也可以使用erlang启动参数-make进行编译(erl -make)。进入make.erl函数中可以看到,执行all方法时,会先判断当前路径是否存在Emakefile文件,如果不存在,则编译当前路径下的所有.erl文件;否则按Emakefile文件中的规则进行编译。编译条件是生成的beam文件的最后修改时间小于源文件的最后修改时间,所以即使你仅仅对项目中的.erl或.hrl中按了ctrl+s而并未做任何修改,下次编译时依然会看到该文件在编译列表中,因为文件的最近修改时间已经被更新了。
make.erl模块中提供all/0、all/1、files/1、files/2方法进行编译,也可以使用erlang启动参数-make进行编译(erl -make)。进入make.erl函数中可以看到,执行all方法时,会先判断当前路径是否存在Emakefile文件,如果不存在,则编译当前路径下的所有.erl文件;否则按Emakefile文件中的规则进行编译。编译条件是生成的beam文件的最后修改时间小于源文件的最后修改时间,所以即使你仅仅对项目中的.erl或.hrl中按了ctrl+s而并未做任何修改,下次编译时依然会看到该文件在编译列表中,因为文件的最近修改时间已经被更新了。
Emakefile的格式应该类似于:
Modules.
{Modules,Options}.
下面有一个项目中的示例文件:
{
[
'src/*',
'src/*/*',
'src/*/*/*',
'src/*/*/*/*'
]
,[
encrypt_debug_info,
{i, "include"},
{outdir, "ebin"}
]
}.
当然你也可以写成:
{
[
'src/*',
'src/*/*'
]
,[
encrypt_debug_info,
{i, "include"},
{outdir, "ebin"}
]
}.
{
[
'src/*/*/*',
'src/*/*/*/*'
]
,[
encrypt_debug_info,
{i, "include"},
{outdir, "ebin"}
]
}.
或者
[
'src/*',
'src/*/*'
].
{
[
'src/*/*/*',
'src/*/*/*/*'
]
,[
encrypt_debug_info,
{i, "include"},
{outdir, "ebin"}
]
}.
摘自官网文档,这里Modules里的含义包括:
a module name, e.g. file1
a module name in another directory, e.g. ../foo/file3
a set of modules specified with a wildcards, e.g. 'file*'
a wildcard indicating all modules in current directory, i.e. '*'
a list of any of the above, e.g. ['file*','../foo/file3','File4']
i代表.hrl头文件的目录,outdir代表编译成功后的二进制beam文件的输出目录。encrypt_debug_info是代码编译加密用的参数,既保留debug_info又防止他人通过beam_lib模块进行代码反编译,需要配置.erlang.crypt文件使用,如果不保留debug_info也可以不保留该参数,官方文档可参考:
http://www.erlang.org/doc/man/beam_lib.html