| .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. | |
| This is the same as specifying | |
| .BR \-\-debug=all . | |
| .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 \-\-debug=basic | |
| 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, | |
| .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 built-in data base only, use | |
| .IR "make \-p \-f/dev/null" . | |
| .TP 0.5i | |
| \fB\-\-print\-targets\fR | |
| Print each target defined as a result of reading the makefiles, one target per | |
| line, then exit with success. Implicit rule targets are not printed, nor are | |
| special targets (target names that consist of "." followed by all upper-case | |
| letters). No recipe commands are invoked and no makefiles are rebuilt. | |
| .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 | |
| \fB\-\-warn\fR[=\fIARG[\fR,\fIARG\fR]] | |
| Control warning reporting for makefiles. This option can appear multiple times. | |
| In case of conflicts, later settings override earlier settings. | |
| .I ARG | |
| can be an action; one of | |
| .IR ignore , | |
| .IR warn , | |
| or | |
| .I error | |
| to set the default action for all warnings, or it can be a specific warning: | |
| .I circular-dep | |
| (finding a circular dependency), | |
| .I invalid-ref | |
| (referencing an invalid variable name), | |
| .I invalid-var | |
| (assigning to an invalid variable name), | |
| or | |
| .I undefined-var | |
| (referencing an undefined variable). The behavior of each warning can be set | |
| by adding | |
| .BI : action | |
| after the warning name. If an action is not specified the default is | |
| .IR warn . | |
| If no | |
| .I ARG | |
| is provided the action for all warnings is | |
| .IR warn . | |
| If no | |
| .B \-\-warn | |
| option is provided the default action for | |
| .I invalid-var | |
| and | |
| .I invalid-ref | |
| is | |
| .I warn | |
| and the default action for | |
| .I undefined-var | |
| is | |
| .IR ignore . | |
| .TP 0.5i | |
| .B \-\-warn\-undefined\-variables | |
| A deprecated alternative for | |
| .BR \-\-warn=undefined-var . | |
| .TP 0.5i | |
| .B \- | |
| This option alone (not as an argument to the | |
| .B \-f | |
| option) is ignored, unless a target named | |
| .B \- | |
| is defined in the makefile, in which case that target is added to the makefile | |
| goals. | |
| .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\(en1993, 1996\(en2025 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/ . |