GNU make

Short Table of Contents

Table of Contents

Next: Overview, Previous: (dir), Up: (dir)   [Contents][Index]

GNU make

This file documents the GNU make utility, which determines automatically which pieces of a large program need to be recompiled, and issues the commands to recompile them.

This is Edition 0.75, last updated 17 January 2020, of The GNU Make Manual, for GNU make version 4.3.

Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document

under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”

(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”



Overview of make.



An introduction to make.



Makefiles tell make what to do.



Rules describe when a file must be remade.



Recipes say how to remake a file.

Using Variables


You can use variables to avoid repetition.



Use or ignore parts of the makefile based on the values of variables.



Many powerful ways to manipulate text.

Invoking make


How to invoke make on the command line.

Implicit Rules


Use implicit rules to treat many files alike, based on their file names.



How make can update library archives.

Extending make


Using extensions to make.

Integrating make


Integrating make with other tools.



Features GNU make has over other makes.



What GNU make lacks from other makes.

Makefile Conventions


Conventions for writing makefiles for GNU programs.

Quick Reference


A quick reference for experienced users.

Error Messages


A list of common errors generated by make.

Complex Makefile


A real example of a straightforward, but nontrivial, makefile.

GNU Free Documentation License


License for copying this manual.

Concept Index


Index of Concepts.

Name Index


Index of Functions, Variables, & Directives.



Preparing and running make.



On reading this text.



Problems and bugs.

Rule Introduction


What a rule looks like.

Simple Makefile


A simple makefile.

How Make Works


How make processes this makefile.

Variables Simplify


Variables make makefiles simpler.

make Deduces


Letting make deduce the recipes.

Combine By Prerequisite


Another style of makefile.



Rules for cleaning the directory.

Makefile Contents


What makefiles contain.

Makefile Names


How to name your makefile.



How one makefile can use another makefile.



The environment can specify extra makefiles.

Remaking Makefiles


How makefiles get remade.

Overriding Makefiles


How to override part of one makefile with another makefile.

Reading Makefiles


How makefiles are read in.

Parsing Makefiles


How makefiles are parsed.

Secondary Expansion


How and when secondary expansion is performed.

Splitting Lines


Splitting long lines in makefiles

Rule Example


An example explained.

Rule Syntax


General syntax explained.

Prerequisite Types


There are two types of prerequisites.



Using wildcard characters such as ‘*’.

Directory Search


Searching other directories for source files.

Phony Targets


Using a target that is not a real file’s name.

Force Targets


You can use a target without a recipe or prerequisites to mark other targets as phony.

Empty Targets


When only the date matters and the files are empty.

Special Targets


Targets with special built-in meanings.

Multiple Targets


When to make use of several targets in a rule.

Multiple Rules


How to use several rules with the same target.

Static Pattern


Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name.



How to use a special kind of rule to allow several independent rules for one target.

Automatic Prerequisites


How to automatically generate rules giving prerequisites from source files themselves.

Wildcard Examples


Several examples.

Wildcard Pitfall


Problems to avoid.

Wildcard Function


How to cause wildcard expansion where it does not normally take place.

General Search


Specifying a search path that applies to every prerequisite.

Selective Search


Specifying a search path for a specified class of names.

Search Algorithm


When and how search paths are applied.



How to write recipes that work together with search paths.



How search paths affect implicit rules.



Directory search for link libraries.

Static Usage


The syntax of static pattern rules.

Static versus Implicit


When are they better than implicit rules?

Recipe Syntax


Recipe syntax features and pitfalls.



How to control when recipes are echoed.



How recipes are executed.



How recipes can be executed in parallel.



What happens after a recipe execution error.



What happens when a recipe is interrupted.



Invoking make from makefiles.

Canned Recipes


Defining canned recipes.

Empty Recipes


Defining useful, do-nothing recipes.

Splitting Recipe Lines


Breaking long recipe lines for readability.

Variables in Recipes


Using make variables in recipes.

One Shell


One shell for all lines in a recipe.

Choosing the Shell


How make chooses the shell used to run recipes.

Parallel Output


Handling output during parallel execution

Parallel Input


Handling input during parallel execution

MAKE Variable


The special effects of using ‘$(MAKE)’.



How to communicate variables to a sub-make.



How to communicate options to a sub-make.

-w Option


How the ‘-w’ or ‘--print-directory’ option helps debug use of recursive make commands.



How to use the value of a variable.



Variables come in two flavors.



Advanced features for referencing a variable.



All the ways variables get their values.



How to set a variable in the makefile.



How to append more text to the old value of a variable.

Override Directive


How to set a variable in the makefile even if the user has set it with a command argument.



An alternate way to set a variable to a multi-line string.

Undefine Directive


How to undefine a variable so that it appears as if it was never set.



Variable values can come from the environment.



Variable values can be defined on a per-target basis.



Target-specific variable values can be applied to a group of targets that match a pattern.

Suppressing Inheritance


Suppress inheritance of variables.

Special Variables


Variables with special meaning or behavior.

Substitution Refs


Referencing a variable with substitutions on the value.

Computed Names


Computing the name of the variable to refer to.

Conditional Example


Example of a conditional

Conditional Syntax


The syntax of conditionals.

Testing Flags


Conditionals that test flags.

Syntax of Functions


How to write a function call.

Text Functions


General-purpose text manipulation functions.

File Name Functions


Functions for manipulating file names.

Conditional Functions


Functions that implement conditions.

Foreach Function


Repeat some text with controlled variation.

File Function


Write text to a file.

Call Function


Expand a user-defined function.

Value Function


Return the un-expanded value of a variable.

Eval Function


Evaluate the arguments as makefile syntax.

Origin Function


Find where a variable got its value.

Flavor Function


Find out the flavor of a variable.

Make Control Functions


Functions that control how make runs.

Shell Function


Substitute the output of a shell command.

Guile Function


Use GNU Guile embedded scripting language.

Makefile Arguments


How to specify which makefile to use.



How to use goal arguments to specify which parts of the makefile to use.

Instead of Execution


How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them.

Avoiding Compilation


How to avoid recompiling certain files.



How to override a variable to specify an alternate compiler and other things.



How to proceed past some errors, to test compilation.

Options Summary


Summary of Options

Using Implicit


How to use an existing implicit rule to get the recipes for updating a file.

Catalogue of Rules


A list of built-in rules.

Implicit Variables


How to change what predefined rules do.

Chained Rules


How to use a chain of implicit rules.

Pattern Rules


How to define new implicit rules.

Last Resort


How to define a recipe for rules which cannot find any.

Suffix Rules


The old-fashioned style of implicit rule.

Implicit Rule Search


The precise algorithm for applying implicit rules.

Pattern Intro


An introduction to pattern rules.

Pattern Examples


Examples of pattern rules.

Automatic Variables


How to use automatic variables in the recipe of implicit rules.

Pattern Match


How patterns match.

Match-Anything Rules


Precautions you should take prior to defining rules that can match any target file whatever.

Canceling Rules


How to override or cancel built-in rules.

Archive Members


Archive members as targets.

Archive Update


The implicit rule for archive member targets.

Archive Pitfalls


Dangers to watch out for when using archives.

Archive Suffix Rules


You can write a special kind of suffix rule for updating archives.

Archive Symbols


How to update archive symbol directories.

Guile Integration


Using Guile as an embedded scripting language.

Loading Objects


Loading dynamic objects as extensions.

Guile Types


Converting Guile types to make strings.

Guile Interface


Invoking make functions from Guile.

Guile Example


Example using Guile in make.

load Directive


Loading dynamic objects as extensions.

Remaking Loaded Objects


How loaded objects get remade.

Loaded Object API


Programmatic interface for loaded objects.

Loaded Object Example


Example of a loaded object

Job Slots


Share job slots with GNU make.

Terminal Output


Control output to terminals.

POSIX Jobserver


Using the jobserver on POSIX systems.

Windows Jobserver


Using the jobserver on Windows systems.

Next: Overview, Previous: (dir), Up: (dir)   [Contents][Index]