Chapter 3. GNU make
The GNU make utility, commonly abbreviated make, is a tool for controlling the generation of executables from source files. make automatically determines which parts of a complex program have changed and need to be recompiled. make uses configuration files called Makefiles to control the way programs are built.
Red Hat Developer Toolset is distributed with make 4.2.1. This version is more recent than the version included in Red Hat Enterprise Linux and provides a number of bug fixes and enhancements.
3.1. Installing make
In Red Hat Developer Toolset, GNU make is provided by the devtoolset-9-make package and is automatically installed with devtoolset-9-toolchain as described in Section 1.5, “Installing Red Hat Developer Toolset”.
3.2. Using make
To build a program without using a Makefile, run the make
tool as follows:
$ scl enable devtoolset-9 'make source_file_without_extension'
This command makes use of implicit rules that are defined for a number of programming languages, including C, C++, and Fortran. The result is a binary file named source_file_without_extension in the current working directory.
Note that you can execute any command using the scl
utility, causing it to be run with the Red Hat Developer Toolset binaries used in preference to the Red Hat Enterprise Linux system equivalent. This allows you to run a shell session with Red Hat Developer Toolset make
as default:
$ scl enable devtoolset-9 'bash'
To verify the version of make
you are using at any point:
$ which make
Red Hat Developer Toolset’s make
executable path will begin with /opt
. Alternatively, you can use the following command to confirm that the version number matches that for Red Hat Developer Toolset make
:
$ make -v
Example 3.1. Building a C Program Using make
Consider a source file named hello.c
with the following contents:
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }
Build this source code using the implicit rules defined by the make
utility from Red Hat Developer Toolset:
$ scl enable devtoolset-9 'make hello'
cc hello.c -o hello
This creates a new binary file called hello
in the current working directory.
3.3. Using Makefiles
To build complex programs that consist of a number of source files, make uses configuration files called Makefiles that control how to compile the components of a program and build the final executable. Makefiles can also contain instructions for cleaning the working directory, installing and uninstalling program files, and other operations.
make automatically uses files named GNUmakefile
, makefile
, or Makefile
in the current directory. To specify another file name, use the -f
option:
$ make -f make_file
Describing the details of Makefile syntax is beyond the scope of this guide. See GNU make, the upstream GNU make manual, which provides an in-depth description of the GNU make utility, Makefile syntax, and their usage.
The full make manual is also available in the Texinfo format as a part of your installation. To view this manual:
$ scl enable devtoolset-9 'info make'
Example 3.2. Building a C Program Using a Makefile
Consider the following universal Makefile named Makefile
for building the simple C program introduced in Example 3.1, “Building a C Program Using make”. The Makefile defines some variables and specifies four rules, which consist of targets and their recipes. Note that the lines with recipes must start with the TAB character:
CC=gcc CFLAGS=-c -Wall SOURCE=hello.c OBJ=$(SOURCE:.c=.o) EXE=hello all: $(SOURCE) $(EXE) $(EXE): $(OBJ) $(CC) $(OBJ) -o $@ .o: .c $(CC) $(CFLAGS) $< -o $@ clean: rm -rf $(OBJ) $(EXE)
To build the hello.c
program using this Makefile, run the make
utility:
$ scl enable devtoolset-9 'make'
gcc -c -Wall hello.c -o hello.o
gcc hello.o -o hello
This creates a new object file hello.o
and a new binary file called hello
in the current working directory.
To clean the working directory, run:
$ scl enable devtoolset-9 'make clean'
rm -rf hello.o hello
This removes the object and binary files from the working directory.
3.4. Additional Resources
For more information about the GNU make tool and its features, see the resources listed below.
Installed Documentation
make(1) — The manual page for the
make
utility provides information on its usage. To display the manual page for the version included in Red Hat Developer Toolset:$
scl enable devtoolset-9 'man make'
The full make manual, which includes detailed information about Makefile syntax, is also available in the Texinfo format. To display the info manual for the version included in Red Hat Developer Toolset:
$
scl enable devtoolset-9 'info make'
Online Documentation
- GNU make — The upstream GNU make manual provides an in-depth description of the GNU make utility, Makefile syntax, and their usage.
See Also
- Chapter 1, Red Hat Developer Toolset — An overview of Red Hat Developer Toolset and more information on how to install it on your system.
- Chapter 2, GNU Compiler Collection (GCC) — Instructions on using the GNU Compiler Collection, a portable compiler suite with support for a wide selection of programming languages.
- Chapter 4, binutils — Instructions on using binutils, a collection of binary tools to inspect and manipulate object files and binaries.
- Chapter 5, elfutils — Instructions on using elfutils, a collection of binary tools to inspect and manipulate ELF files.
- Chapter 6, dwz — Instructions on using the dwz tool to optimize DWARF debugging information contained in ELF shared libraries and ELF executables for size.
- Chapter 8, GNU Debugger (GDB) — Instructions on debugging programs written in C, C++, and Fortran.