make.1 (11853B)
- .TH MAKE 1 "26 May 2023" "GNU" "User Commands"
- .SH NAME
- make \- GNU Make utility to maintain groups of programs
- .SH SYNOPSIS
- .B make
- [\fIOPTION\fR]... [\fITARGET\fR]...
- .SH DESCRIPTION
- .LP
- The
- .I make
- utility will determine automatically which pieces of a large program need to
- be recompiled, and issue the commands to recompile them. The manual describes
- the GNU implementation of
- .BR make ,
- which was written by Richard Stallman and Roland McGrath, and is currently
- maintained by Paul Smith. Our examples show C programs, since they are very
- common, but you can use
- .B make
- with any programming language whose compiler can be run with a shell command.
- In fact,
- .B make
- is not limited to programs. You can use it to describe any task where some
- files must be updated automatically from others whenever the others change.
- .LP
- To prepare to use
- .BR make ,
- you must write a file called the
- .I makefile
- that describes the relationships among files in your program, and provides
- commands for updating each file. In a program, typically the executable file
- is updated from object files, which are in turn made by compiling source
- files.
- .LP
- Once a suitable makefile exists, each time you change some source files,
- this simple shell command:
- .sp 1
- .RS
- .B make
- .RE
- .sp 1
- suffices to perform all necessary recompilations.
- The
- .B make
- program uses the makefile description and the last-modification times of the
- files to decide which of the files need to be updated. For each of those
- files, it issues the commands recorded in the makefile.
- .LP
- .B make
- executes commands in the
- .I makefile
- to update one or more
- .IR targets ,
- where
- .I target
- is typically a program.
- If no
- .B \-f
- option is present,
- .B make
- will look for the makefiles
- .IR GNUmakefile ,
- .IR makefile ,
- and
- .IR Makefile ,
- in that order.
- .LP
- Normally you should call your makefile either
- .I makefile
- or
- .IR Makefile .
- (We recommend
- .I Makefile
- because it appears prominently near the beginning of a directory
- listing, right near other important files such as
- .IR README .)
- The first name checked,
- .IR GNUmakefile ,
- is not recommended for most makefiles. You should use this name if you have a
- makefile that is specific to GNU Make, and will not be understood by other
- versions of
- .BR make .
- If
- .I makefile
- is '\-', the standard input is read.
- .LP
- .B make
- updates a target if it depends on prerequisite files
- that have been modified since the target was last modified,
- or if the target does not exist.
- .SH OPTIONS
- .sp 1
- .TP 0.5i
- \fB\-b\fR, \fB\-m\fR
- These options are ignored for compatibility with other versions of
- .BR make .
- .TP 0.5i
- \fB\-B\fR, \fB\-\-always\-make\fR
- Unconditionally make all targets.
- .TP 0.5i
- \fB\-C\fR \fIdir\fR, \fB\-\-directory\fR=\fIdir\fR
- Change to directory
- .I dir
- before reading the makefiles or doing anything else.
- If multiple
- .B \-C
- options are specified, each is interpreted relative to the
- previous one:
- .BR "\-C " /
- .BR "\-C " etc
- is equivalent to
- .BR "\-C " /etc.
- This is typically used with recursive invocations of
- .BR make .
- .TP 0.5i
- .B \-d
- Print debugging information in addition to normal processing.
- The debugging information says which files are being considered for
- remaking, which file-times are being compared and with what results,
- which files actually need to be remade, which implicit rules are
- considered and which are applied---everything interesting about how
- .B make
- decides what to do.
- .TP 0.5i
- .BI \-\-debug "[=FLAGS]"
- Print debugging information in addition to normal processing.
- If the
- .I FLAGS
- are omitted, then the behavior is the same as if
- .B \-d
- was specified.
- .I FLAGS
- may be any or all of the following names, comma- or space-separated. Only the
- first character is significant: the rest may be omitted:
- .I all
- for all debugging output (same as using
- .BR \-d ),
- .I basic
- for basic debugging,
- .I verbose
- for more verbose basic debugging,
- .I implicit
- for showing implicit rule search operations,
- .I jobs
- for details on invocation of commands,
- .I makefile
- for debugging while remaking makefiles,
- .I print
- shows all recipes that are run even if they are silent, and
- .I why
- shows the reason
- .BR make
- decided to rebuild each target. Use
- .I none
- to disable all previous debugging flags.
- .TP 0.5i
- \fB\-e\fR, \fB\-\-environment\-overrides\fR
- Give variables taken from the environment precedence over variables
- from makefiles.
- .TP 0.5i
- \fB\-E\fR \fIstring\fR, \fB\-\-eval\fR \fIstring\fR
- Interpret \fIstring\fR using the \fBeval\fR function, before parsing any
- makefiles.
- .TP 0.5i
- \fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR
- Use
- .I file
- as a makefile.
- .TP 0.5i
- \fB\-i\fR, \fB\-\-ignore\-errors\fR
- Ignore all errors in commands executed to remake files.
- .TP 0.5i
- \fB\-I\fR \fIdir\fR, \fB\-\-include\-dir\fR=\fIdir\fR
- Specifies a directory
- .I dir
- to search for included makefiles.
- If several
- .B \-I
- options are used to specify several directories, the directories are
- searched in the order specified.
- Unlike the arguments to other flags of
- .BR make ,
- directories given with
- .B \-I
- flags may come directly after the flag:
- .BI \-I dir
- is allowed, as well as
- .B \-I
- .IR dir .
- This syntax is allowed for compatibility with the C
- preprocessor's
- .B \-I
- flag.
- .TP 0.5i
- \fB\-j\fR [\fIjobs\fR], \fB\-\-jobs\fR[=\fIjobs\fR]
- Specifies the number of
- .I jobs
- (commands) to run simultaneously.
- If there is more than one
- .B \-j
- option, the last one is effective.
- If the
- .B \-j
- option is given without an argument,
- .BR make
- will not limit the number of jobs that can run simultaneously.
- .TP 0.5i
- \fB\--jobserver-style=\fR\fIstyle\fR
- The style of jobserver to use. The
- .I style
- may be one of
- .BR fifo ,
- .BR pipe ,
- or
- .B sem
- (Windows only).
- .TP 0.5i
- \fB\-k\fR, \fB\-\-keep\-going\fR
- Continue as much as possible after an error.
- While the target that failed, and those that depend on it, cannot
- be remade, the other dependencies of these targets can be processed
- all the same.
- .TP 0.5i
- \fB\-l\fR [\fIload\fR], \fB\-\-load\-average\fR[=\fIload\fR]
- Specifies that no new jobs (commands) should be started if there are
- others jobs running and the load average is at least
- .I load
- (a floating-point number).
- With no argument, removes a previous load limit.
- .TP 0.5i
- \fB\-L\fR, \fB\-\-check\-symlink\-times\fR
- Use the latest mtime between symlinks and target.
- .TP 0.5i
- \fB\-n\fR, \fB\-\-just\-print\fR, \fB\-\-dry\-run\fR, \fB\-\-recon\fR
- Print the commands that would be executed, but do not execute them (except in
- certain circumstances).
- .TP 0.5i
- \fB\-o\fR \fIfile\fR, \fB\-\-old\-file\fR=\fIfile\fR, \fB\-\-assume\-old\fR=\fIfile\fR
- Do not remake the file
- .I file
- even if it is older than its dependencies, and do not remake anything
- on account of changes in
- .IR file .
- Essentially the file is treated as very old and its rules are ignored.
- .TP 0.5i
- \fB\-O\fR[\fItype\fR], \fB\-\-output\-sync\fR[=\fItype\fR]
- When running multiple jobs in parallel with \fB-j\fR, ensure the output of
- each job is collected together rather than interspersed with output from
- other jobs. If
- .I type
- is not specified or is
- .B target
- the output from the entire recipe for each target is grouped together. If
- .I type
- is
- .B line
- the output from each command line within a recipe is grouped together.
- If
- .I type
- is
- .B recurse
- output from an entire recursive make is grouped together. If
- .I type
- is
- .B none
- output synchronization is disabled.
- .TP 0.5i
- \fB\-p\fR, \fB\-\-print\-data\-base\fR
- Print the data base (rules and variable values) that results from
- reading the makefiles; then execute as usual or as otherwise
- specified.
- This also prints the version information given by the
- .B \-v
- switch (see below).
- To print the data base without trying to remake any files, use
- .IR "make \-p \-f/dev/null" .
- .TP 0.5i
- \fB\-q\fR, \fB\-\-question\fR
- ``Question mode''.
- Do not run any commands, or print anything; just return an exit status
- that is zero if the specified targets are already up to date, nonzero
- otherwise.
- .TP 0.5i
- \fB\-r\fR, \fB\-\-no\-builtin\-rules\fR
- Eliminate use of the built\-in implicit rules.
- Also clear out the default list of suffixes for suffix rules.
- .TP 0.5i
- \fB\-R\fR, \fB\-\-no\-builtin\-variables\fR
- Don't define any built\-in variables.
- .TP 0.5i
- \fB\-s\fR, \fB\-\-silent\fR, \fB\-\-quiet\fR
- Silent operation; do not print the commands as they are executed.
- .TP 0.5i
- .B \-\-no\-silent
- Cancel the effect of the \fB\-s\fR option.
- .TP 0.5i
- \fB\-S\fR, \fB\-\-no\-keep\-going\fR, \fB\-\-stop\fR
- Cancel the effect of the
- .B \-k
- option.
- .TP 0.5i
- \fB\-t\fR, \fB\-\-touch\fR
- Touch files (mark them up to date without really changing them)
- instead of running their commands.
- This is used to pretend that the commands were done, in order to fool
- future invocations of
- .BR make .
- .TP 0.5i
- .B \-\-trace
- Information about the disposition of each target is printed (why the target is
- being rebuilt and what commands are run to rebuild it).
- .TP 0.5i
- \fB\-v\fR, \fB\-\-version\fR
- Print the version of the
- .B make
- program plus a copyright, a list of authors and a notice that there
- is no warranty.
- .TP 0.5i
- \fB\-w\fR, \fB\-\-print\-directory\fR
- Print a message containing the working directory
- before and after other processing.
- This may be useful for tracking down errors from complicated nests of
- recursive
- .B make
- commands.
- .TP 0.5i
- .B \-\-no\-print\-directory
- Turn off
- .BR \-w ,
- even if it was turned on implicitly.
- .TP 0.5i
- .BI \-\-shuffle "[=MODE]"
- Enable shuffling of goal and prerequisite ordering.
- .I MODE
- is one of
- .I none
- to disable shuffle mode,
- .I random
- to shuffle prerequisites in random order,
- .I reverse
- to consider prerequisites in reverse order, or an integer
- .I <seed>
- which enables
- .I random
- mode with a specific
- .I seed
- value. If
- .I MODE
- is omitted the default is
- .IR random .
- .TP 0.5i
- \fB\-W\fR \fIfile\fR, \fB\-\-what\-if\fR=\fIfile\fR, \fB\-\-new\-file\fR=\fIfile\fR, \fB\-\-assume\-new\fR=\fIfile\fR
- Pretend that the target
- .I file
- has just been modified.
- When used with the
- .B \-n
- flag, this shows you what would happen if you were to modify that file.
- Without
- .BR \-n ,
- it is almost the same as running a
- .I touch
- command on the given file before running
- .BR make ,
- except that the modification time is changed only in the imagination of
- .BR make .
- .TP 0.5i
- .B \-\-warn\-undefined\-variables
- Warn when an undefined variable is referenced.
- .SH "EXIT STATUS"
- GNU Make exits with a status of zero if all makefiles were successfully parsed
- and no targets that were built failed. A status of one will be returned
- if the
- .B \-q
- flag was used and
- .B make
- determines that a target needs to be rebuilt. A status of two will be
- returned if any errors were encountered.
- .SH "SEE ALSO"
- The full documentation for
- .B make
- is maintained as a Texinfo manual. If the
- .B info
- and
- .B make
- programs are properly installed at your site, the command
- .IP
- .B info make
- .PP
- should give you access to the complete manual.
- .SH BUGS
- See the chapter ``Problems and Bugs'' in
- .IR "The GNU Make Manual" .
- .SH AUTHOR
- This manual page contributed by Dennis Morse of Stanford University.
- Further updates contributed by Mike Frysinger. It has been reworked by Roland
- McGrath. Maintained by Paul Smith.
- .SH "COPYRIGHT"
- Copyright \(co 1992-1993, 1996-2023 Free Software Foundation, Inc.
- This file is part of
- .IR "GNU Make" .
- .LP
- GNU Make is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3 of the License, or (at your option) any later
- version.
- .LP
- GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- .LP
- You should have received a copy of the GNU General Public License along with
- this program. If not, see
- .IR https://www.gnu.org/licenses/ .