1996 2013 Ericsson AB, All Rights Reserved The contents of this file are subject to the Erlang Public License, Version 1.1, (the "License"); you may not use this file except in compliance with the License. You should have received a copy of the Erlang Public License along with this software. If not, it can be retrieved online at http://www.erlang.org/. Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Initial Developer of the Original Code is Ericsson AB. make
make A Make Utility for Erlang

The module make provides a set of functions similar to the UNIX type Make functions.

all() -> up_to_date | error all(Options) -> up_to_date | error Compile a set of modules. Options = [Option]  Option = noexec | load | netload | <compiler option>

This function first looks in the current working directory for a file named Emakefile (see below) specifying the set of modules to compile and the compile options to use. If no such file is found, the set of modules to compile defaults to all modules in the current working directory.

Traversing the set of modules, it then recompiles every module for which at least one of the following conditions apply:

there is no object file, or the source file has been modified since it was last compiled, or, an include file has been modified since the source file was last compiled.

As a side effect, the function prints the name of each module it tries to compile. If compilation fails for a module, the make procedure stops and error is returned.

Options is a list of make- and compiler options. The following make options exist:

noexec

No execution mode. Just prints the name of each module that needs to be compiled.
load

Load mode. Loads all recompiled modules.
netload

Net load mode. Loads all recompiled modules an all known nodes.

All items in Options that are not make options are assumed to be compiler options and are passed as-is to compile:file/2. Options defaults to [].

files(ModFiles) -> up_to_date | error files(ModFiles, Options) -> up_to_date | error Compile a set of modules. ModFiles = [Module | File]  Module = atom()  File = string() Options = [Option]  Option = noexec | load | netload | <compiler option>

files/1,2 does exactly the same thing as all/0,1 but for the specified ModFiles, which is a list of module or file names. The file extension .erl may be omitted.

The Emakefile (if it exists) in the current directory is searched for compiler options for each module. If a given module does not exist in Emakefile or if Emakefile does not exist, the module is still compiled.

Emakefile

make:all/0,1 and make:files/1,2 looks in the current working directory for a file named Emakefile. If it exists, Emakefile should contain elements like this:

Modules. {Modules,Options}.

Modules is an atom or a list of atoms. It can be

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']

Options is a list of compiler options.

Emakefile is read from top to bottom. If a module matches more than one entry, the first match is valid. For example, the following Emakefile means that file1 shall be compiled with the options [debug_info,{i,"../foo"}], while all other files in the current directory shall be compiled with only the debug_info flag.

{'file1',[debug_info,{i,"../foo"}]}. {'*',[debug_info]}.