查看源码 make (工具 v4.1.1)
Erlang 的 Make 工具
模块 make
提供了一组类似于 UNIX 类型 Make
函数的功能。
Emakefile
make:all/0,1
和 make:files/1,2
首先在选项中查找 {emake, Emake}
,然后在当前工作目录中查找名为 Emakefile
的文件。如果存在,Emake
应包含如下元素
Modules.
{Modules,Options}.
Modules
是一个原子或原子列表。它可以是
- 一个模块名称,例如,
file1
- 另一个目录中的模块名称,例如,
'../foo/file3'
- 一组使用通配符指定的模块,例如,
'file*'
- 一个指示当前目录中所有模块的通配符,即:
'*'
- 上述任何一项的列表,例如,
['file*','../foo/file3','File4']
Options
是编译器选项的列表。
Emakefile
从上到下读取。如果一个模块匹配多个条目,则使用第一个匹配项。例如,以下 Emakefile
表示 file1
应使用选项 [debug_info,{i,"../foo"}]
编译,而当前目录中的所有其他文件应仅使用 debug_info
标志编译。
{'file1',[debug_info,{i,"../foo"}]}.
{'*',[debug_info]}.
另请参阅
概要
函数
-spec all() -> up_to_date | error.
等同于 all([])
。
-spec all(Options) -> up_to_date | error when Options :: [Option], Option :: noexec | load | netload | {emake, Emake} | compile:option(), Emake :: [EmakeElement], EmakeElement :: Modules | {Modules, [compile:option()]}, Modules :: atom() | [atom()].
此函数通过首先查找 emake
make 选项来确定要编译的模块集和要使用的编译选项,如果不存在,则从名为 Emakefile
的文件中读取配置(见下文)。如果未找到此类文件,则要编译的模块集默认为当前工作目录中的所有模块。
遍历模块集,然后重新编译满足以下至少一个条件的每个模块
- 没有目标文件,或者
- 自上次编译以来,源文件已被修改,或者,
- 自上次编译源文件以来,包含文件已被修改。
作为副作用,该函数会打印它尝试编译的每个模块的名称。如果模块编译失败,则 make 过程停止并返回 error
。
Options
是 make
和 Erlang 编译器的选项列表。存在以下 make
选项
noexec
无执行模式。仅打印需要编译的每个模块的名称。load
加载模式。加载所有重新编译的模块。netload
网络加载模式。在所有已知节点上加载所有重新编译的模块。{emake, Emake}
而不是读取Emakefile
,显式指定配置。
Options
中所有不是 make 选项的项目都被假定为编译器选项,并按原样传递给 compile:file/2
。
-spec files(ModFiles) -> up_to_date | error when ModFiles :: [(Module :: module()) | (File :: file:filename())].
等同于 files(ModFiles, [])
。
-spec files(ModFiles, Options) -> up_to_date | error when ModFiles :: [(Module :: module()) | (File :: file:filename())], Options :: [Option], Option :: noexec | load | netload | compile:option().
此函数的功能与 all/0,1
完全相同,但针对指定的 ModFiles
,它是模块或文件名称的列表。
可以省略文件扩展名 .erl
。
在当前目录中搜索 Emakefile
(如果存在)以查找每个模块的编译器选项。如果 Emakefile
中不存在给定模块,或者 Emakefile
不存在,则仍会编译该模块。