All serious software projects are built in pieces by many developers. These pieces consist of source code and header files, libraries and different tools. To combine these pieces into a product is a process commonly known as a build. The GNU make utility is one of the many available utilities used to build these software projects. Large software projects often have hundreds and even thousands of files. Compiling these files and linking them into final executable product files is done by a careful and well-defined automated process. This automated process, also known as the software build process, is controlled by the
make utility through makefiles. The
make utility reads one or more of these makefiles containing information about how to build a project. Makefiles contain different types of information, including variables, control structures and rules to compile and link source files, build libraries and so on. In the most common makefiles, rules are present to remove object and executable files from the source code directory to clean it up, if required. These rules are enforced based upon time stamps on different files. For example, if an existing object file is newer than the corresponding source code file, it is not recompiled. However if the object file is older than the source file, it shows that someone modified the source file after the object file was last built. In such a case,
make detects it and rebuilds the object file. Depending upon the requirements of a project, someone can create different types of rules and commands to build software projects.
This chapter contains information on how to write makefiles for software projects and provides sufficient information for a reader to write makefiles for fairly complex projects. You can also refer to the reference at the end of this chapter for more comprehensive information about the
To demonstrate the use of
make, several examples are presented in this chapter. These examples demonstrate how
make can be used for different objectives. These examples are simple and easy to understand and are explained in the text. However you may write makefiles in many different ways for the same object. Features of
make that are discussed in this chapter are those most commonly used.
Make has many additional, less commonly used, features that are not covered here and you may want to use these as well while designing your makefiles.