1 BMAKE(1) FreeBSD General Commands Manual BMAKE(1)
4 \e[1mbmake
\e[22m-- maintain program dependencies
7 \e[1mbmake
\e[22m[
\e[1m-BeikNnqrSstWwX
\e[22m] [
\e[1m-C
\e[4m
\e[22mdirectory
\e[24m] [
\e[1m-D
\e[4m
\e[22mvariable
\e[24m] [
\e[1m-d
\e[4m
\e[22mflags
\e[24m]
8 [
\e[1m-f
\e[4m
\e[22mmakefile
\e[24m] [
\e[1m-I
\e[4m
\e[22mdirectory
\e[24m] [
\e[1m-J
\e[4m
\e[22mprivate
\e[24m] [
\e[1m-j
\e[4m
\e[22mmax_jobs
\e[24m]
9 [
\e[1m-m
\e[4m
\e[22mdirectory
\e[24m] [
\e[1m-T
\e[4m
\e[22mfile
\e[24m] [
\e[1m-V
\e[4m
\e[22mvariable
\e[24m] [
\e[1m-v
\e[4m
\e[22mvariable
\e[24m]
10 [
\e[4mvariable
\e[24m
\e[1m=
\e[4m
\e[22mvalue
\e[24m] [
\e[4mtarget
\e[24m ...]
13 \e[1mbmake
\e[22mis a program designed to simplify the maintenance of other pro-
14 grams. Its input is a list of specifications as to the files upon which
15 programs and other files depend. If no
\e[1m-f
\e[4m
\e[22mmakefile
\e[24m option is given,
16 \e[1mbmake
\e[22mtries to open `
\e[4mmakefile
\e[24m' then `
\e[4mMakefile
\e[24m' in order to find the spec-
17 ifications. If the file `
\e[4m.depend
\e[24m' exists, it is read, see mkdep(1).
19 This manual page is intended as a reference document only. For a more
20 thorough description of
\e[1mbmake
\e[22mand makefiles, please refer to
\e[4mPMake
\e[24m
\e[4m-
\e[24m
\e[4mA
\e[0m
21 \e[4mTutorial
\e[24m (from 1993).
23 \e[1mbmake
\e[22mprepends the contents of the MAKEFLAGS environment variable to the
24 command line arguments before parsing them.
26 The options are as follows:
28 \e[1m-B
\e[22mTry to be backwards compatible by executing a single shell per
29 command and by making the sources of a dependency line in se-
32 \e[1m-C
\e[4m
\e[22mdirectory
\e[0m
33 Change to
\e[4mdirectory
\e[24m before reading the makefiles or doing any-
34 thing else. If multiple
\e[1m-C
\e[22moptions are specified, each is inter-
35 preted relative to the previous one:
\e[1m-C
\e[4m
\e[22m/
\e[24m
\e[1m-C
\e[4m
\e[22metc
\e[24m is equivalent to
36 \e[1m-C
\e[4m
\e[22m/etc
\e[24m.
38 \e[1m-D
\e[4m
\e[22mvariable
\e[0m
39 Define
\e[4mvariable
\e[24m to be 1, in the global scope.
41 \e[1m-d
\e[22m[
\e[1m-
\e[22m]
\e[4mflags
\e[0m
42 Turn on debugging, and specify which portions of
\e[1mbmake
\e[22mare to
43 print debugging information. Unless the flags are preceded by
44 `-', they are added to the MAKEFLAGS environment variable and are
45 passed on to any child make processes. By default, debugging in-
46 formation is printed to standard error, but this can be changed
47 using the
\e[1mF
\e[22mdebugging flag. The debugging output is always un-
48 buffered; in addition, if debugging is enabled but debugging out-
49 put is not directed to standard output, the standard output is
50 line buffered. The available
\e[4mflags
\e[24m are:
52 \e[1mA
\e[22mPrint all possible debugging information; equivalent to
53 specifying all of the debugging flags.
55 \e[1ma
\e[22mPrint debugging information about archive searching and
58 \e[1mC
\e[22mPrint debugging information about the current working di-
61 \e[1mc
\e[22mPrint debugging information about conditional evaluation.
63 \e[1md
\e[22mPrint debugging information about directory searching and
66 \e[1me
\e[22mPrint debugging information about failed commands and
69 \e[1mF
\e[22m[
\e[1m+
\e[22m]
\e[4mfilename
\e[0m
70 Specify where debugging output is written. This must be
71 the last flag, because it consumes the remainder of the
72 argument. If the character immediately after the
\e[1mF
\e[22mflag
73 is `+', the file is opened in append mode; otherwise the
74 file is overwritten. If the file name is `stdout' or
75 `stderr', debugging output is written to the standard
76 output or standard error output respectively (and the `+'
77 option has no effect). Otherwise, the output is written
78 to the named file. If the file name ends with `.%d', the
79 `%d' is replaced by the pid.
81 \e[1mf
\e[22mPrint debugging information about loop evaluation.
83 \e[1mg1
\e[22mPrint the input graph before making anything.
85 \e[1mg2
\e[22mPrint the input graph after making everything, or before
88 \e[1mg3
\e[22mPrint the input graph before exiting on error.
90 \e[1mh
\e[22mPrint debugging information about hash table operations.
92 \e[1mj
\e[22mPrint debugging information about running multiple
95 \e[1mL
\e[22mTurn on lint checks. This throws errors for variable as-
96 signments that do not parse correctly, at the time of as-
97 signment, so the file and line number are available.
99 \e[1ml
\e[22mPrint commands in Makefiles regardless of whether or not
100 they are prefixed by `@' or other "quiet" flags. Also
101 known as "loud" behavior.
103 \e[1mM
\e[22mPrint debugging information about "meta" mode decisions
106 \e[1mm
\e[22mPrint debugging information about making targets, includ-
107 ing modification dates.
109 \e[1mn
\e[22mDon't delete the temporary command scripts created when
110 running commands. These temporary scripts are created in
111 the directory referred to by the TMPDIR environment vari-
112 able, or in
\e[4m/tmp
\e[24m if TMPDIR is unset or set to the empty
113 string. The temporary scripts are created by mkstemp(3),
114 and have names of the form
\e[4mmakeXXXXXX
\e[24m.
\e[4mNOTE
\e[24m: This can
115 create many files in TMPDIR or
\e[4m/tmp
\e[24m, so use with care.
117 \e[1mp
\e[22mPrint debugging information about makefile parsing.
119 \e[1ms
\e[22mPrint debugging information about suffix-transformation
122 \e[1mt
\e[22mPrint debugging information about target list mainte-
125 \e[1mV
\e[22mForce the
\e[1m-V
\e[22moption to print raw values of variables,
126 overriding the default behavior set via
127 \e[4m.MAKE.EXPAND_VARIABLES
\e[24m.
129 \e[1mv
\e[22mPrint debugging information about variable assignment and
132 \e[1mx
\e[22mRun shell commands with
\e[1m-x
\e[22mso the actual commands are
133 printed as they are executed.
135 \e[1m-e
\e[22mLet environment variables override global variables within make-
138 \e[1m-f
\e[4m
\e[22mmakefile
\e[0m
139 Specify a makefile to read instead of the default
\e[4mmakefile
\e[24m or
140 \e[4mMakefile
\e[24m. If
\e[4mmakefile
\e[24m is `-', standard input is read. Multiple
141 makefiles may be specified, and are read in the order specified.
143 \e[1m-I
\e[4m
\e[22mdirectory
\e[0m
144 Specify a directory in which to search for makefiles and included
145 makefiles. The system makefile directory (or directories, see
146 the
\e[1m-m
\e[22moption) is automatically included as part of this list.
148 \e[1m-i
\e[22mIgnore non-zero exit of shell commands in the makefile. Equiva-
149 lent to specifying `-' before each command line in the makefile.
151 \e[1m-J
\e[4m
\e[22mprivate
\e[0m
152 This option should
\e[4mnot
\e[24m be specified by the user.
154 When the
\e[1m-j
\e[22moption is in use in a recursive build, this option is
155 passed by a make to child makes to allow all the make processes
156 in the build to cooperate to avoid overloading the system.
158 \e[1m-j
\e[4m
\e[22mmax_jobs
\e[0m
159 Specify the maximum number of jobs that
\e[1mbmake
\e[22mmay have running at
160 any one time. The value of
\e[4mmax_jobs
\e[24m is saved in
\e[4m.MAKE.JOBS
\e[24m.
161 Turns compatibility mode off, unless the
\e[1m-B
\e[22moption is also speci-
162 fied. When compatibility mode is off, all commands associated
163 with a target are executed in a single shell invocation as op-
164 posed to the traditional one shell invocation per line. This can
165 break traditional scripts which change directories on each com-
166 mand invocation and then expect to start with a fresh environment
167 on the next line. It is more efficient to correct the scripts
168 rather than turn backwards compatibility on.
170 A job token pool with
\e[4mmax_jobs
\e[24m tokens is used to control the to-
171 tal number of jobs running. Each instance of
\e[1mbmake
\e[22mwill wait for
172 a token from the pool before running a new job.
174 \e[1m-k
\e[22mContinue processing after errors are encountered, but only on
175 those targets that do not depend on the target whose creation
178 \e[1m-m
\e[4m
\e[22mdirectory
\e[0m
179 Specify a directory in which to search for
\e[4msys.mk
\e[24m and makefiles
180 included via the <
\e[4mfile
\e[24m>-style include statement. The
\e[1m-m
\e[22moption
181 can be used multiple times to form a search path. This path
182 overrides the default system include path
\e[4m/usr/share/mk
\e[24m. Fur-
183 thermore, the system include path is appended to the search path
184 used for "
\e[4mfile
\e[24m"-style include statements (see the
\e[1m-I
\e[22moption).
185 The system include path can be referenced via the read-only vari-
186 able
\e[4m.SYSPATH
\e[24m.
188 If a directory name in the
\e[1m-m
\e[22margument (or the MAKESYSPATH envi-
189 ronment variable) starts with the string `.../',
\e[1mbmake
\e[22msearches
190 for the specified file or directory named in the remaining part
191 of the argument string. The search starts with the current di-
192 rectory and then works upward towards the root of the file sys-
193 tem. If the search is successful, the resulting directory re-
194 places the `.../' specification in the
\e[1m-m
\e[22margument. This feature
195 allows
\e[1mbmake
\e[22mto easily search in the current source tree for cus-
196 tomized
\e[4msys.mk
\e[24m files (e.g., by using `.../mk/sys.mk' as an argu-
199 \e[1m-n
\e[22mDisplay the commands that would have been executed, but do not
200 actually execute them unless the target depends on the
\e[4m.MAKE
\e[24m spe-
201 cial source (see below) or the command is prefixed with `
\e[1m+
\e[22m'.
203 \e[1m-N
\e[22mDisplay the commands that would have been executed, but do not
204 actually execute any of them; useful for debugging top-level
205 makefiles without descending into subdirectories.
207 \e[1m-q
\e[22mDo not execute any commands, instead exit 0 if the specified tar-
208 gets are up to date, and 1 otherwise.
210 \e[1m-r
\e[22mDo not use the built-in rules specified in the system makefile.
212 \e[1m-S
\e[22mStop processing if an error is encountered. This is the default
213 behavior and the opposite of
\e[1m-k
\e[22m.
215 \e[1m-s
\e[22mDo not echo any commands as they are executed. Equivalent to
216 specifying `
\e[1m@
\e[22m' before each command line in the makefile.
218 \e[1m-T
\e[4m
\e[22mtracefile
\e[0m
219 When used with the
\e[1m-j
\e[22mflag, append a trace record to
\e[4mtracefile
\e[0m
220 for each job started and completed.
222 \e[1m-t
\e[22mRather than re-building a target as specified in the makefile,
223 create it or update its modification time to make it appear up-
226 \e[1m-V
\e[4m
\e[22mvariable
\e[0m
227 Print the value of
\e[4mvariable
\e[24m. Do not build any targets. Multiple
228 instances of this option may be specified; the variables are
229 printed one per line, with a blank line for each null or unde-
230 fined variable. The value printed is extracted from the global
231 scope after all makefiles have been read.
233 By default, the raw variable contents (which may include addi-
234 tional unexpanded variable references) are shown. If
\e[4mvariable
\e[0m
235 contains a `$', it is not interpreted as a variable name but
236 rather as an expression. Its value is expanded before printing.
237 The value is also expanded before printing if
238 \e[4m.MAKE.EXPAND_VARIABLES
\e[24m is set to true and the
\e[1m-dV
\e[22moption has not
239 been used to override it.
241 Note that loop-local and target-local variables, as well as val-
242 ues taken temporarily by global variables during makefile pro-
243 cessing, are not accessible via this option. The
\e[1m-dv
\e[22mdebug mode
244 can be used to see these at the cost of generating substantial
247 \e[1m-v
\e[4m
\e[22mvariable
\e[0m
248 Like
\e[1m-V
\e[22m, but all printed variables are always expanded to their
249 complete value. The last occurrence of
\e[1m-V
\e[22mor
\e[1m-v
\e[22mdecides whether
250 all variables are expanded or not.
252 \e[1m-W
\e[22mTreat any warnings during makefile parsing as errors.
254 \e[1m-w
\e[22mPrint entering and leaving directory messages, pre and post pro-
257 \e[1m-X
\e[22mDon't export variables passed on the command line to the environ-
258 ment individually. Variables passed on the command line are
259 still exported via the MAKEFLAGS environment variable. This op-
260 tion may be useful on systems which have a small limit on the
261 size of command arguments.
263 \e[4mvariable
\e[24m
\e[1m=
\e[4m
\e[22mvalue
\e[0m
264 Set the value of the variable
\e[4mvariable
\e[24m to
\e[4mvalue
\e[24m. Normally, all
265 values passed on the command line are also exported to sub-makes
266 in the environment. The
\e[1m-X
\e[22mflag disables this behavior. Vari-
267 able assignments should follow options for POSIX compatibility
268 but no ordering is enforced.
270 There are several different types of lines in a makefile: dependency
271 specifications, shell commands, variable assignments, include statements,
272 conditional directives, for loops, other directives, and comments.
274 Lines may be continued from one line to the next by ending them with a
275 backslash (`\'). The trailing newline character and initial whitespace
276 on the following line are compressed into a single space.
278 \e[1mFILE DEPENDENCY SPECIFICATIONS
\e[0m
279 Dependency lines consist of one or more targets, an operator, and zero or
280 more sources. This creates a relationship where the targets "depend" on
281 the sources and are customarily created from them. A target is consid-
282 ered out of date if it does not exist, or if its modification time is
283 less than that of any of its sources. An out-of-date target is re-cre-
284 ated, but not until all sources have been examined and themselves re-cre-
285 ated as needed. Three operators may be used:
287 \e[1m:
\e[22mMany dependency lines may name this target but only one may have
288 attached shell commands. All sources named in all dependency lines
289 are considered together, and if needed the attached shell commands
290 are run to create or re-create the target. If
\e[1mbmake
\e[22mis inter-
291 rupted, the target is removed.
293 \e[1m!
\e[22mThe same, but the target is always re-created whether or not it is
296 \e[1m::
\e[22mAny dependency line may have attached shell commands, but each one
297 is handled independently: its sources are considered and the at-
298 tached shell commands are run if the target is out of date with re-
299 spect to (only) those sources. Thus, different groups of the at-
300 tached shell commands may be run depending on the circumstances.
301 Furthermore, unlike
\e[1m:
\e[22m, for dependency lines with no sources, the
302 attached shell commands are always run. Also unlike
\e[1m:
\e[22m, the target
303 is not removed if
\e[1mbmake
\e[22mis interrupted.
305 All dependency lines mentioning a particular target must use the same op-
308 Targets and sources may contain the shell wildcard values `?', `*', `[]',
309 and `{}'. The values `?', `*', and `[]' may only be used as part of the
310 final component of the target or source, and only match existing files.
311 The value `{}' need not necessarily be used to describe existing files.
312 Expansion is in directory order, not alphabetically as done in the shell.
314 \e[1mSHELL COMMANDS
\e[0m
315 Each target may have associated with it one or more lines of shell com-
316 mands, normally used to create the target. Each of the lines in this
317 script
\e[4mmust
\e[24m be preceded by a tab. (For historical reasons, spaces are
318 not accepted.) While targets can occur in many dependency lines if de-
319 sired, by default only one of these rules may be followed by a creation
320 script. If the `
\e[1m::
\e[22m' operator is used, however, all rules may include
321 scripts, and the respective scripts are executed in the order found.
323 Each line is treated as a separate shell command, unless the end of line
324 is escaped with a backslash `\', in which case that line and the next are
325 combined. If the first characters of the command are any combination of
326 `
\e[1m@
\e[22m', `
\e[1m+
\e[22m', or `
\e[1m-
\e[22m', the command is treated specially.
328 \e[1m@
\e[22mcauses the command not to be echoed before it is executed.
330 \e[1m+
\e[22mcauses the command to be executed even when
\e[1m-n
\e[22mis given.
331 This is similar to the effect of the
\e[4m.MAKE
\e[24m special source,
332 except that the effect can be limited to a single line of a
335 \e[1m-
\e[22min compatibility mode causes any non-zero exit status of
336 the command line to be ignored.
338 When
\e[1mbmake
\e[22mis run in jobs mode with
\e[1m-j
\e[4m
\e[22mmax_jobs
\e[24m, the entire script for
339 the target is fed to a single instance of the shell. In compatibility
340 (non-jobs) mode, each command is run in a separate process. If the com-
341 mand contains any shell meta characters (`#=|^(){};&<>*?[]:$`\\n'), it is
342 passed to the shell; otherwise
\e[1mbmake
\e[22mattempts direct execution. If a
343 line starts with `
\e[1m-
\e[22m' and the shell has ErrCtl enabled, failure of the
344 command line is ignored as in compatibility mode. Otherwise `
\e[1m-
\e[22m' affects
345 the entire job; the script stops at the first command line that fails,
346 but the target is not deemed to have failed.
348 Makefiles should be written so that the mode of
\e[1mbmake
\e[22moperation does not
349 change their behavior. For example, any command which uses "cd" or
350 "chdir" without the intention of changing the directory for subsequent
351 commands should be put in parentheses so it executes in a subshell. To
352 force the use of a single shell, escape the line breaks so as to make the
353 whole script one command. For example:
355 avoid-chdir-side-effects:
356 @echo "Building $@ in $$(pwd)"
357 @(cd ${.CURDIR} && ${MAKE} $@)
358 @echo "Back in $$(pwd)"
360 ensure-one-shell-regardless-of-mode:
361 @echo "Building $@ in $$(pwd)"; \
362 (cd ${.CURDIR} && ${MAKE} $@); \
363 echo "Back in $$(pwd)"
365 Since
\e[1mbmake
\e[22mchanges the current working directory to `
\e[4m.OBJDIR
\e[24m' before ex-
366 ecuting any targets, each child process starts with that as its current
369 \e[1mVARIABLE ASSIGNMENTS
\e[0m
370 Variables in make behave much like macros in the C preprocessor.
372 Variable assignments have the form `
\e[4mNAME
\e[24m
\e[4mop
\e[24m
\e[4mvalue
\e[24m', where:
374 \e[4mNAME
\e[24m is a single-word variable name, consisting, by tradition,
375 of all upper-case letters,
377 \e[4mop
\e[24m is one of the variable assignment operators described be-
380 \e[4mvalue
\e[24m is interpreted according to the variable assignment opera-
383 Whitespace around
\e[4mNAME
\e[24m,
\e[4mop
\e[24m and
\e[4mvalue
\e[24m is discarded.
385 \e[1mVariable assignment operators
\e[0m
386 The five operators that assign values to variables are:
388 \e[1m=
\e[22mAssign the value to the variable. Any previous value is over-
391 \e[1m+=
\e[22mAppend the value to the current value of the variable, separating
392 them by a single space.
394 \e[1m?=
\e[22mAssign the value to the variable if it is not already defined.
396 \e[1m:=
\e[22mExpand the value, then assign it to the variable.
398 \e[4mNOTE
\e[24m: References to undefined variables are
\e[4mnot
\e[24m expanded. This
399 can cause problems when variable modifiers are used.
401 \e[1m!=
\e[22mExpand the value and pass it to the shell for execution, then as-
402 sign the output from the child's standard output to the variable.
403 Any newlines in the result are replaced with spaces.
405 \e[1mExpansion of variables
\e[0m
406 In most contexts where variables are expanded, `$$' expands to a single
407 dollar sign. In other contexts (most variable modifiers, string literals
408 in conditions), `\$' expands to a single dollar sign.
410 References to variables have the form
\e[1m${
\e[4m
\e[22mname
\e[24m[
\e[1m:
\e[4m
\e[22mmodifiers
\e[24m]
\e[1m}
\e[22mor
411 \e[1m$(
\e[4m
\e[22mname
\e[24m[
\e[1m:
\e[4m
\e[22mmodifiers
\e[24m]
\e[1m)
\e[22m. If the variable name consists of only a single
412 character and the expression contains no modifiers, the surrounding curly
413 braces or parentheses are not required. This shorter form is not recom-
416 If the variable name contains a dollar, the name itself is expanded
417 first. This allows almost arbitrary variable names, however names con-
418 taining dollar, braces, parentheses or whitespace are really best
421 If the result of expanding a nested variable expression contains a dollar
422 sign (`$'), the result is subject to further expansion.
424 Variable substitution occurs at four distinct times, depending on where
425 the variable is being used.
427 1. Variables in dependency lines are expanded as the line is read.
429 2. Variables in conditionals are expanded individually, but only as far
430 as necessary to determine the result of the conditional.
432 3. Variables in shell commands are expanded when the shell command is
435 4.
\e[1m.for
\e[22mloop index variables are expanded on each loop iteration. Note
436 that other variables are not expanded when composing the body of a
437 loop, so the following example code:
454 After the loop is executed:
456 \e[4ma
\e[24m contains `${:U1} ${:U2} ${:U3}', which expands to `1 2
459 \e[4mj
\e[24m contains `${:U3}', which expands to `3'.
461 \e[4mb
\e[24m contains `${j} ${j} ${j}', which expands to `${:U3}
462 ${:U3} ${:U3}' and further to `3 3 3'.
464 \e[1mVariable classes
\e[0m
465 The four different classes of variables (in order of increasing prece-
468 Environment variables
469 Variables defined as part of
\e[1mbmake
\e[22m's environment.
472 Variables defined in the makefile or in included makefiles.
474 Command line variables
475 Variables defined as part of the command line.
478 Variables that are defined specific to a certain target.
480 Local variables can be set on a dependency line, unless
481 \e[4m.MAKE.TARGET_LOCAL_VARIABLES
\e[24m is set to `false'. The rest of the line
482 (which already has had global variables expanded) is the variable value.
485 COMPILER_WRAPPERS= ccache distcc icecc
487 ${OBJS}: .MAKE.META.CMP_FILTER=${COMPILER_WRAPPERS:S,^,N,}
489 Only the targets `${OBJS}' are impacted by that filter (in "meta" mode)
490 and simply enabling/disabling any of the compiler wrappers does not ren-
491 der all of those targets out-of-date.
493 \e[4mNOTE
\e[24m: target-local variable assignments behave differently in that;
495 \e[1m+=
\e[22mOnly appends to a previous local assignment for the same
498 \e[1m:=
\e[22mIs redundant with respect to global variables, which have
499 already been expanded.
501 The seven built-in local variables are:
503 \e[4m.ALLSRC
\e[24m The list of all sources for this target; also known as
506 \e[4m.ARCHIVE
\e[24m The name of the archive file; also known as `
\e[4m!
\e[24m'.
508 \e[4m.IMPSRC
\e[24m In suffix-transformation rules, the name/path of the
509 source from which the target is to be transformed (the
510 "implied" source); also known as `
\e[4m<
\e[24m'. It is not defined
513 \e[4m.MEMBER
\e[24m The name of the archive member; also known as `
\e[4m%
\e[24m'.
515 \e[4m.OODATE
\e[24m The list of sources for this target that were deemed out-
516 of-date; also known as `
\e[4m?
\e[24m'.
518 \e[4m.PREFIX
\e[24m The file prefix of the target, containing only the file
519 portion, no suffix or preceding directory components;
520 also known as `
\e[4m*
\e[24m'. The suffix must be one of the known
521 suffixes declared with
\e[1m.SUFFIXES
\e[22m, or it is not recog-
524 \e[4m.TARGET
\e[24m The name of the target; also known as `
\e[4m@
\e[24m'. For compati-
525 bility with other makes this is an alias for
\e[4m.ARCHIVE
\e[24m in
526 archive member rules.
528 The shorter forms (`
\e[4m>
\e[24m', `
\e[4m!
\e[24m', `
\e[4m<
\e[24m', `
\e[4m%
\e[24m', `
\e[4m?
\e[24m', `
\e[4m*
\e[24m', and `
\e[4m@
\e[24m') are permitted
529 for backward compatibility with historical makefiles and legacy POSIX
530 make and are not recommended.
532 Variants of these variables with the punctuation followed immediately by
533 `D' or `F', e.g. `$(@D)', are legacy forms equivalent to using the `:H'
534 and `:T' modifiers. These forms are accepted for compatibility with AT&T
535 System V UNIX makefiles and POSIX but are not recommended.
537 Four of the local variables may be used in sources on dependency lines
538 because they expand to the proper value for each target on the line.
539 These variables are `
\e[4m.TARGET
\e[24m', `
\e[4m.PREFIX
\e[24m', `
\e[4m.ARCHIVE
\e[24m', and `
\e[4m.MEMBER
\e[24m'.
541 \e[1mAdditional built-in variables
\e[0m
542 In addition,
\e[1mbmake
\e[22msets or knows about the following variables:
544 \e[4m.ALLTARGETS
\e[0m
545 The list of all targets encountered in the makefiles. If evalu-
546 ated during makefile parsing, lists only those targets encoun-
550 A path to the directory where
\e[1mbmake
\e[22mwas executed. Refer to the
551 description of `
\e[4mPWD
\e[24m' for more details.
554 Is used in error handling, see
\e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m.
557 Is used in error handling, see
\e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m.
559 \e[4m.ERROR_META_FILE
\e[0m
560 Is used in error handling in "meta" mode, see
561 \e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m.
563 \e[4m.ERROR_TARGET
\e[0m
564 Is used in error handling, see
\e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m.
566 \e[4m.INCLUDEDFROMDIR
\e[0m
567 The directory of the file this makefile was included from.
569 \e[4m.INCLUDEDFROMFILE
\e[0m
570 The filename of the file this makefile was included from.
573 The machine hardware name, see uname(1).
575 \e[4mMACHINE_ARCH
\e[0m
576 The machine processor architecture name, see uname(1).
578 \e[4mMAKE
\e[24m The name that
\e[1mbmake
\e[22mwas executed with (
\e[4margv[0]
\e[24m).
580 \e[4m.MAKE
\e[24m The same as
\e[4mMAKE
\e[24m, for compatibility. The preferred variable to
581 use is the environment variable MAKE because it is more compati-
582 ble with other make variants and cannot be confused with the spe-
583 cial target with the same name.
585 \e[4m.MAKE.DEPENDFILE
\e[0m
586 Names the makefile (default `
\e[4m.depend
\e[24m') from which generated de-
589 \e[4m.MAKE.DIE_QUIETLY
\e[0m
590 If set to `true', do not print error information at the end.
592 \e[4m.MAKE.EXPAND_VARIABLES
\e[0m
593 A boolean that controls the default behavior of the
\e[1m-V
\e[22moption.
594 If true, variable values printed with
\e[1m-V
\e[22mare fully expanded; if
595 false, the raw variable contents (which may include additional
596 unexpanded variable references) are shown.
598 \e[4m.MAKE.EXPORTED
\e[0m
599 The list of variables exported by
\e[1mbmake
\e[22m.
602 The top-level makefile that is currently read, as given in the
606 The environment variable `MAKEFLAGS' may contain anything that
607 may be specified on
\e[1mbmake
\e[22m's command line. Anything specified on
608 \e[1mbmake
\e[22m's command line is appended to the
\e[4m.MAKEFLAGS
\e[24m variable,
609 which is then added to the environment for all programs that
610 \e[1mbmake
\e[22mexecutes.
613 The numeric group ID of the user running
\e[1mbmake
\e[22m. It is read-only.
615 \e[4m.MAKE.JOB.PREFIX
\e[0m
616 If
\e[1mbmake
\e[22mis run with
\e[1m-j
\e[22m, the output for each target is prefixed
618 ---
\e[4mtarget
\e[24m ---
619 the first part of which can be controlled via
\e[4m.MAKE.JOB.PREFIX
\e[24m.
620 If
\e[4m.MAKE.JOB.PREFIX
\e[24m is empty, no token is printed. For example,
621 setting
\e[4m.MAKE.JOB.PREFIX
\e[24m to
622 `${.newline}---${.MAKE:T}[${.MAKE.PID}]' would produce tokens
624 ---make[1234]
\e[4mtarget
\e[24m ---
625 making it easier to track the degree of parallelism being
629 The argument to the
\e[1m-j
\e[22moption.
631 \e[4m.MAKE.LEVEL
\e[0m
632 The recursion depth of
\e[1mbmake
\e[22m. The top-level instance of
\e[1mbmake
\e[0m
633 has level 0, and each child make has its parent level plus 1.
634 This allows tests like: .if ${.MAKE.LEVEL} == 0 to protect things
635 which should only be evaluated in the top-level instance of
638 \e[4m.MAKE.LEVEL.ENV
\e[0m
639 The name of the environment variable that stores the level of
640 nested calls to
\e[1mbmake
\e[22m.
642 \e[4m.MAKE.MAKEFILE_PREFERENCE
\e[0m
643 The ordered list of makefile names (default `
\e[4mmakefile
\e[24m',
644 `
\e[4mMakefile
\e[24m') that
\e[1mbmake
\e[22mlooks for.
646 \e[4m.MAKE.MAKEFILES
\e[0m
647 The list of makefiles read by
\e[1mbmake
\e[22m, which is useful for tracking
648 dependencies. Each makefile is recorded only once, regardless of
649 the number of times read.
651 \e[4m.MAKE.META.BAILIWICK
\e[0m
652 In "meta" mode, provides a list of prefixes which match the di-
653 rectories controlled by
\e[1mbmake
\e[22m. If a file that was generated out-
654 side of
\e[4m.OBJDIR
\e[24m but within said bailiwick is missing, the current
655 target is considered out-of-date.
657 \e[4m.MAKE.META.CMP_FILTER
\e[0m
658 In "meta" mode, it can (very rarely!) be useful to filter command
659 lines before comparison. This variable can be set to a set of
660 modifiers that are applied to each line of the old and new com-
661 mand that differ, if the filtered commands still differ, the tar-
662 get is considered out-of-date.
664 \e[4m.MAKE.META.CREATED
\e[0m
665 In "meta" mode, this variable contains a list of all the meta
666 files updated. If not empty, it can be used to trigger process-
667 ing of
\e[4m.MAKE.META.FILES
\e[24m.
669 \e[4m.MAKE.META.FILES
\e[0m
670 In "meta" mode, this variable contains a list of all the meta
671 files used (updated or not). This list can be used to process
672 the meta files to extract dependency information.
674 \e[4m.MAKE.META.IGNORE_FILTER
\e[0m
675 Provides a list of variable modifiers to apply to each pathname.
676 Ignore if the expansion is an empty string.
678 \e[4m.MAKE.META.IGNORE_PATHS
\e[0m
679 Provides a list of path prefixes that should be ignored; because
680 the contents are expected to change over time. The default list
681 includes: `
\e[4m/dev
\e[24m
\e[4m/etc
\e[24m
\e[4m/proc
\e[24m
\e[4m/tmp
\e[24m
\e[4m/var/run
\e[24m
\e[4m/var/tmp
\e[24m'
683 \e[4m.MAKE.META.IGNORE_PATTERNS
\e[0m
684 Provides a list of patterns to match against pathnames. Ignore
687 \e[4m.MAKE.META.PREFIX
\e[0m
688 Defines the message printed for each meta file updated in "meta
689 verbose" mode. The default value is:
690 Building ${.TARGET:H:tA}/${.TARGET:T}
693 Processed after reading all makefiles. Affects the mode that
694 \e[1mbmake
\e[22mruns in. It can contain these keywords:
696 \e[1mcompat
\e[22mLike
\e[1m-B
\e[22m, puts
\e[1mbmake
\e[22minto "compat" mode.
698 \e[1mmeta
\e[22mPuts
\e[1mbmake
\e[22minto "meta" mode, where meta files are created
699 for each target to capture the command run, the output
700 generated, and if filemon(4) is available, the system
701 calls which are of interest to
\e[1mbmake
\e[22m. The captured out-
702 put can be useful when diagnosing errors.
704 \e[1mcurdirOk=
\e[4m
\e[22mbf
\e[0m
705 By default,
\e[1mbmake
\e[22mdoes not create
\e[4m.meta
\e[24m files in
706 `
\e[4m.CURDIR
\e[24m'. This can be overridden by setting
\e[4mbf
\e[24m to a
707 value which represents true.
709 \e[1mmissing-meta=
\e[4m
\e[22mbf
\e[0m
710 If
\e[4mbf
\e[24m is true, a missing
\e[4m.meta
\e[24m file makes the target out-
713 \e[1mmissing-filemon=
\e[4m
\e[22mbf
\e[0m
714 If
\e[4mbf
\e[24m is true, missing filemon data makes the target out-
718 Do not use filemon(4).
720 \e[1menv
\e[22mFor debugging, it can be useful to include the environ-
721 ment in the
\e[4m.meta
\e[24m file.
724 If in "meta" mode, print a clue about the target being
725 built. This is useful if the build is otherwise running
726 silently. The message printed is the expanded value of
727 \e[4m.MAKE.META.PREFIX
\e[24m.
730 Some makefiles have commands which are simply not stable.
731 This keyword causes them to be ignored for determining
732 whether a target is out of date in "meta" mode. See also
733 \e[1m.NOMETA_CMP
\e[22m.
735 \e[1msilent=
\e[4m
\e[22mbf
\e[0m
736 If
\e[4mbf
\e[24m is true, when a .meta file is created, mark the
737 target
\e[1m.SILENT
\e[22m.
739 \e[1mrandomize-targets
\e[0m
740 In both compat and parallel mode, do not make the targets
741 in the usual order, but instead randomize their order.
742 This mode can be used to detect undeclared dependencies
746 Used to create files in a separate directory, see
\e[4m.OBJDIR
\e[24m.
748 \e[4mMAKE_OBJDIR_CHECK_WRITABLE
\e[0m
749 Used to force a separate directory for the created files, even if
750 that directory is not writable, see
\e[4m.OBJDIR
\e[24m.
752 \e[4mMAKEOBJDIRPREFIX
\e[0m
753 Used to create files in a separate directory, see
\e[4m.OBJDIR
\e[24m.
756 The name of the operating system, see uname(1). It is read-only.
758 \e[4m.MAKEOVERRIDES
\e[0m
759 This variable is used to record the names of variables assigned
760 to on the command line, so that they may be exported as part of
761 `MAKEFLAGS'. This behavior can be disabled by assigning an empty
762 value to `
\e[4m.MAKEOVERRIDES
\e[24m' within a makefile. Extra variables can
763 be exported from a makefile by appending their names to
764 `
\e[4m.MAKEOVERRIDES
\e[24m'. `MAKEFLAGS' is re-exported whenever
765 `
\e[4m.MAKEOVERRIDES
\e[24m' is modified.
767 \e[4m.MAKE.PATH_FILEMON
\e[0m
768 If
\e[1mbmake
\e[22mwas built with filemon(4) support, this is set to the
769 path of the device node. This allows makefiles to test for this
773 The process ID of
\e[1mbmake
\e[22m. It is read-only.
776 The parent process ID of
\e[1mbmake
\e[22m. It is read-only.
778 \e[4mMAKE_PRINT_VAR_ON_ERROR
\e[0m
779 When
\e[1mbmake
\e[22mstops due to an error, it sets `
\e[4m.ERROR_TARGET
\e[24m' to the
780 name of the target that failed, `
\e[4m.ERROR_CMD
\e[24m' to the commands of
781 the failed target, and in "meta" mode, it also sets `
\e[4m.ERROR_CWD
\e[24m'
782 to the getcwd(3), and `
\e[4m.ERROR_META_FILE
\e[24m' to the path of the meta
783 file (if any) describing the failed target. It then prints its
784 name and the value of `
\e[4m.CURDIR
\e[24m' as well as the value of any vari-
785 ables named in `
\e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m'.
787 \e[4m.MAKE.SAVE_DOLLARS
\e[0m
788 If true, `$$' are preserved when doing `:=' assignments. The de-
789 fault is false, for backwards compatibility. Set to true for
790 compatability with other makes. If set to false, `$$' becomes
791 `$' per normal evaluation rules.
793 \e[4m.MAKE.TARGET_LOCAL_VARIABLES
\e[0m
794 If set to `false', apparent variable assignments in dependency
795 lines are treated as normal sources.
798 The numeric ID of the user running
\e[1mbmake
\e[22m. It is read-only.
801 This variable is simply assigned a newline character as its
802 value. It is read-only. This allows expansions using the
\e[1m:@
\e[0m
803 modifier to put a newline between iterations of the loop rather
804 than a space. For example, in case of an error,
\e[1mbmake
\e[22mprints the
805 variable names and their values using:
806 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
809 A path to the directory where the targets are built. Its value
810 is determined by trying to chdir(2) to the following directories
811 in order and using the first match:
813 1.
\e[1m${MAKEOBJDIRPREFIX}${.CURDIR}
\e[0m
815 (Only if `MAKEOBJDIRPREFIX' is set in the environment or on
818 2.
\e[1m${MAKEOBJDIR}
\e[0m
820 (Only if `MAKEOBJDIR' is set in the environment or on the
823 3.
\e[1m${.CURDIR}
\e[4m
\e[22m/obj.
\e[24m
\e[1m${MACHINE}
\e[0m
825 4.
\e[1m${.CURDIR}
\e[4m
\e[22m/obj
\e[0m
827 5.
\e[4m/usr/obj/
\e[24m
\e[1m${.CURDIR}
\e[0m
829 6.
\e[1m${.CURDIR}
\e[0m
831 Variable expansion is performed on the value before it is used,
832 so expressions such as
\e[1m${.CURDIR:S,^/usr/src,/var/obj,}
\e[22mmay be
833 used. This is especially useful with `MAKEOBJDIR'.
835 `
\e[4m.OBJDIR
\e[24m' may be modified in the makefile via the special target
836 `
\e[1m.OBJDIR
\e[22m'. In all cases,
\e[1mbmake
\e[22mchanges to the specified direc-
837 tory if it exists, and sets `
\e[4m.OBJDIR
\e[24m' and `
\e[4mPWD
\e[24m' to that directory
838 before executing any targets.
840 Except in the case of an explicit `
\e[1m.OBJDIR
\e[22m' target,
\e[1mbmake
\e[22mchecks
841 that the specified directory is writable and ignores it if not.
842 This check can be skipped by setting the environment variable
843 `MAKE_OBJDIR_CHECK_WRITABLE' to "no".
846 The directory name of the current makefile being parsed.
849 The basename of the current makefile being parsed. This variable
850 and `
\e[4m.PARSEDIR
\e[24m' are both set only while the makefiles are being
851 parsed. To retain their current values, assign them to a vari-
852 able using assignment with expansion `
\e[1m:=
\e[22m'.
854 \e[4m.PATH
\e[24m The space-separated list of directories that
\e[1mbmake
\e[22msearches for
855 files. To update this search list, use the special target
856 `
\e[1m.PATH
\e[22m' rather than modifying the variable directly.
858 \e[4m%POSIX
\e[24m Is set in POSIX mode, see the special `
\e[4m.POSIX
\e[24m' target.
860 \e[4mPWD
\e[24m Alternate path to the current directory.
\e[1mbmake
\e[22mnormally sets
861 `
\e[4m.CURDIR
\e[24m' to the canonical path given by getcwd(3). However, if
862 the environment variable `PWD' is set and gives a path to the
863 current directory,
\e[1mbmake
\e[22msets `
\e[4m.CURDIR
\e[24m' to the value of `PWD' in-
864 stead. This behavior is disabled if `MAKEOBJDIRPREFIX' is set or
865 `MAKEOBJDIR' contains a variable transform. `
\e[4mPWD
\e[24m' is set to the
866 value of `
\e[4m.OBJDIR
\e[24m' for all programs which
\e[1mbmake
\e[22mexecutes.
868 \e[4m.SHELL
\e[24m The pathname of the shell used to run target scripts. It is
872 The list of known suffixes. It is read-only.
875 The space-separated list of directories that
\e[1mbmake
\e[22msearches for
876 makefiles, referred to as the system include path. To update
877 this search list, use the special target `
\e[1m.SYSPATH
\e[22m' rather than
878 modifying the variable which is read-only.
881 The list of targets explicitly specified on the command line, if
884 \e[4mVPATH
\e[24m The colon-separated (":") list of directories that
\e[1mbmake
\e[22msearches
885 for files. This variable is supported for compatibility with old
886 make programs only, use `
\e[4m.PATH
\e[24m' instead.
888 \e[1mVariable modifiers
\e[0m
889 The general format of a variable expansion is:
891 \e[1m${
\e[4m
\e[22mvariable
\e[24m[
\e[1m:
\e[4m
\e[22mmodifier
\e[24m[
\e[1m:
\e[22m...]]
\e[1m}
\e[0m
893 Each modifier begins with a colon. To escape a colon, precede it with a
896 A list of indirect modifiers can be specified via a variable, as follows:
898 \e[4mmodifier_variable
\e[24m =
\e[4mmodifier
\e[24m[
\e[1m:
\e[22m...]
900 \e[1m${
\e[4m
\e[22mvariable
\e[24m
\e[1m:${
\e[4m
\e[22mmodifier_variable
\e[24m
\e[1m}
\e[22m[
\e[1m:
\e[22m...]
\e[1m}
\e[0m
902 In this case, the first modifier in the
\e[4mmodifier_variable
\e[24m does not start
903 with a colon, since that colon already occurs in the referencing vari-
904 able. If any of the modifiers in the
\e[4mmodifier_variable
\e[24m contains a dollar
905 sign (`$'), these must be doubled to avoid early expansion.
907 Some modifiers interpret the expression value as a single string, others
908 treat the expression value as a whitespace-separated list of words. When
909 splitting a string into words, whitespace can be escaped using double
910 quotes, single quotes and backslashes, like in the shell. The quotes and
911 backslashes are retained in the words.
913 The supported modifiers are:
915 \e[1m:E
\e[22mReplaces each word with its suffix.
917 \e[1m:H
\e[22mReplaces each word with its dirname.
919 \e[1m:M
\e[4m
\e[22mpattern
\e[0m
920 Selects only those words that match
\e[4mpattern
\e[24m. The standard shell
921 wildcard characters (`*', `?', and `[]') may be used. The wildcard
922 characters may be escaped with a backslash (`\'). As a consequence
923 of the way values are split into words, matched, and then joined,
924 the construct `${VAR:M*}' removes all leading and trailing white-
925 space and normalizes the inter-word spacing to a single space.
927 \e[1m:N
\e[4m
\e[22mpattern
\e[0m
928 This is the opposite of `
\e[1m:M
\e[22m', selecting all words which do
\e[4mnot
\e[24m match
931 \e[1m:O
\e[22mOrders the words lexicographically.
933 \e[1m:On
\e[22mOrders the words numerically. A number followed by one of `k', `M'
934 or `G' is multiplied by the appropriate factor, which is 1024 for
935 `k', 1048576 for `M', or 1073741824 for `G'. Both upper- and lower-
936 case letters are accepted.
938 \e[1m:Or
\e[22mOrders the words in reverse lexicographical order.
941 Orders the words in reverse numerical order.
943 \e[1m:Ox
\e[22mShuffles the words. The results are different each time you are re-
944 ferring to the modified variable; use the assignment with expansion
945 `
\e[1m:=
\e[22m' to prevent such behavior. For example,
947 LIST= uno due tre quattro
948 RANDOM_LIST= ${LIST:Ox}
949 STATIC_RANDOM_LIST:= ${LIST:Ox}
952 @echo "${RANDOM_LIST}"
953 @echo "${RANDOM_LIST}"
954 @echo "${STATIC_RANDOM_LIST}"
955 @echo "${STATIC_RANDOM_LIST}"
956 may produce output similar to:
963 \e[1m:Q
\e[22mQuotes every shell meta-character in the value, so that it can be
964 passed safely to the shell.
966 \e[1m:q
\e[22mQuotes every shell meta-character in the value, and also doubles `$'
967 characters so that it can be passed safely through recursive invoca-
968 tions of
\e[1mbmake
\e[22m. This is equivalent to `
\e[1m:S/\$/&&/g:Q
\e[22m'.
970 \e[1m:R
\e[22mReplaces each word with everything but its suffix.
972 \e[1m:range
\e[22m[
\e[1m=
\e[4m
\e[22mcount
\e[24m]
973 The value is an integer sequence representing the words of the orig-
974 inal value, or the supplied
\e[4mcount
\e[24m.
976 \e[1m:gmtime
\e[22m[
\e[1m=
\e[4m
\e[22mtimestamp
\e[24m]
977 The value is interpreted as a format string for strftime(3), using
978 gmtime(3), producing the formatted timestamp. If a
\e[4mtimestamp
\e[24m value
979 is not provided or is 0, the current time is used.
982 Computes a 32-bit hash of the value and encodes it as 8 hex digits.
984 \e[1m:localtime
\e[22m[
\e[1m=
\e[4m
\e[22mtimestamp
\e[24m]
985 The value is interpreted as a format string for strftime(3), using
986 localtime(3), producing the formatted timestamp. If a
\e[4mtimestamp
\e[0m
987 value is not provided or is 0, the current time is used.
989 \e[1m:tA
\e[22mAttempts to convert the value to an absolute path using realpath(3).
990 If that fails, the value is unchanged.
992 \e[1m:tl
\e[22mConverts the value to lower-case letters.
994 \e[1m:ts
\e[4m
\e[22mc
\e[0m
995 When joining the words after a modifier that treats the value as
996 words, the words are normally separated by a space. This modifier
997 changes the separator to the character
\e[4mc
\e[24m. If
\e[4mc
\e[24m is omitted, no sepa-
998 rator is used. The common escapes (including octal numeric codes)
1001 \e[1m:tu
\e[22mConverts the value to upper-case letters.
1003 \e[1m:tW
\e[22mCauses subsequent modifiers to treat the value as a single word
1004 (possibly containing embedded whitespace). See also `
\e[1m:[*]
\e[22m'.
1006 \e[1m:tw
\e[22mCauses the value to be treated as a list of words. See also `
\e[1m:[@]
\e[22m'.
1008 \e[1m:S
\e[22m/
\e[4mold_string
\e[24m/
\e[4mnew_string
\e[24m/[
\e[1m1gW
\e[22m]
1009 Modifies the first occurrence of
\e[4mold_string
\e[24m in each word of the
1010 value, replacing it with
\e[4mnew_string
\e[24m. If a `g' is appended to the
1011 last delimiter of the pattern, all occurrences in each word are re-
1012 placed. If a `1' is appended to the last delimiter of the pattern,
1013 only the first occurrence is affected. If a `W' is appended to the
1014 last delimiter of the pattern, the value is treated as a single
1015 word. If
\e[4mold_string
\e[24m begins with a caret (`^'),
\e[4mold_string
\e[24m is an-
1016 chored at the beginning of each word. If
\e[4mold_string
\e[24m ends with a
1017 dollar sign (`$'), it is anchored at the end of each word. Inside
1018 \e[4mnew_string
\e[24m, an ampersand (`&') is replaced by
\e[4mold_string
\e[24m (without
1019 the anchoring `^' or `$'). Any character may be used as the delim-
1020 iter for the parts of the modifier string. The anchoring, ampersand
1021 and delimiter characters can be escaped with a backslash (`\').
1023 Both
\e[4mold_string
\e[24m and
\e[4mnew_string
\e[24m may contain nested expressions. To
1024 prevent a dollar sign from starting a nested expression, escape it
1027 \e[1m:C
\e[22m/
\e[4mpattern
\e[24m/
\e[4mreplacement
\e[24m/[
\e[1m1gW
\e[22m]
1028 The
\e[1m:C
\e[22mmodifier works like the
\e[1m:S
\e[22mmodifier except that the old and
1029 new strings, instead of being simple strings, are an extended regu-
1030 lar expression
\e[4mpattern
\e[24m (see regex(3)) and an ed(1)-style
1031 \e[4mreplacement
\e[24m. Normally, the first occurrence of the pattern
\e[4mpattern
\e[0m
1032 in each word of the value is substituted with
\e[4mreplacement
\e[24m. The `1'
1033 modifier causes the substitution to apply to at most one word; the
1034 `g' modifier causes the substitution to apply to as many instances
1035 of the search pattern
\e[4mpattern
\e[24m as occur in the word or words it is
1036 found in; the `W' modifier causes the value to be treated as a sin-
1037 gle word (possibly containing embedded whitespace).
1039 As for the
\e[1m:S
\e[22mmodifier, the
\e[4mpattern
\e[24m and
\e[4mreplacement
\e[24m are subjected to
1040 variable expansion before being parsed as regular expressions.
1042 \e[1m:T
\e[22mReplaces each word with its last path component (basename).
1044 \e[1m:u
\e[22mRemoves adjacent duplicate words (like uniq(1)).
1046 \e[1m:?
\e[4m
\e[22mtrue_string
\e[24m
\e[1m:
\e[4m
\e[22mfalse_string
\e[0m
1047 If the variable name (not its value), when parsed as a
\e[1m.if
\e[22mcondi-
1048 tional expression, evaluates to true, return as its value the
1049 \e[4mtrue_string
\e[24m, otherwise return the
\e[4mfalse_string
\e[24m. Since the variable
1050 name is used as the expression, :? must be the first modifier after
1051 the variable name itself--which, of course, usually contains vari-
1052 able expansions. A common error is trying to use expressions like
1053 ${NUMBERS:M42:?match:no}
1054 which actually tests defined(NUMBERS). To determine if any words
1055 match "42", you need to use something like:
1056 ${"${NUMBERS:M42}" != "":?match:no}.
1058 \e[1m:
\e[4m
\e[22mold_string
\e[24m
\e[1m=
\e[4m
\e[22mnew_string
\e[0m
1059 This is the AT&T System V UNIX style substitution. It can only be
1060 the last modifier specified, as a `:' in either
\e[4mold_string
\e[24m or
1061 \e[4mnew_string
\e[24m is treated as a regular character, not as the end of the
1064 If
\e[4mold_string
\e[24m does not contain the pattern matching character `%',
1065 and the word ends with
\e[4mold_string
\e[24m or equals it, that suffix is re-
1066 placed with
\e[4mnew_string
\e[24m.
1068 Otherwise, the first `%' in
\e[4mold_string
\e[24m matches a possibly empty sub-
1069 string of arbitrary characters, and if the whole pattern is found in
1070 the word, the matching part is replaced with
\e[4mnew_string
\e[24m, and the
1071 first occurrence of `%' in
\e[4mnew_string
\e[24m (if any) is replaced with the
1072 substring matched by the `%'.
1074 Both
\e[4mold_string
\e[24m and
\e[4mnew_string
\e[24m may contain nested expressions. To
1075 prevent a dollar sign from starting a nested expression, escape it
1078 \e[1m:@
\e[4m
\e[22mvarname
\e[24m
\e[1m@
\e[4m
\e[22mstring
\e[24m
\e[1m@
\e[0m
1079 This is the loop expansion mechanism from the OSF Development Envi-
1080 ronment (ODE) make. Unlike
\e[1m.for
\e[22mloops, expansion occurs at the time
1081 of reference. For each word in the value, assign the word to the
1082 variable named
\e[4mvarname
\e[24m and evaluate
\e[4mstring
\e[24m. The ODE convention is
1083 that
\e[4mvarname
\e[24m should start and end with a period, for example:
1084 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
1086 However, a single-letter variable is often more readable:
1087 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
1089 \e[1m:_
\e[22m[
\e[1m=
\e[4m
\e[22mvar
\e[24m]
1090 Saves the current variable value in `$_' or the named
\e[4mvar
\e[24m for later
1091 reference. Example usage:
1093 M_cmpv.units = 1 1000 1000000
1094 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \
1095 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh
1097 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}}
1099 Here `$_' is used to save the result of the `:S' modifier which is
1100 later referenced using the index values from `:range'.
1102 \e[1m:U
\e[4m
\e[22mnewval
\e[0m
1103 If the variable is undefined,
\e[4mnewval
\e[24m is the value. If the variable
1104 is defined, the existing value is returned. This is another ODE
1105 make feature. It is handy for setting per-target CFLAGS for in-
1107 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
1108 If a value is only required if the variable is undefined, use:
1111 \e[1m:D
\e[4m
\e[22mnewval
\e[0m
1112 If the variable is defined,
\e[4mnewval
\e[24m is the value.
1114 \e[1m:L
\e[22mThe name of the variable is the value.
1116 \e[1m:P
\e[22mThe path of the node which has the same name as the variable is the
1117 value. If no such node exists or its path is null, the name of the
1118 variable is used. In order for this modifier to work, the name
1119 (node) must at least have appeared on the right-hand side of a de-
1122 \e[1m:!
\e[4m
\e[22mcmd
\e[24m
\e[1m!
\e[0m
1123 The output of running
\e[4mcmd
\e[24m is the value.
1125 \e[1m:sh
\e[22mThe value is run as a command, and the output becomes the new value.
1127 \e[1m::=
\e[4m
\e[22mstr
\e[0m
1128 The variable is assigned the value
\e[4mstr
\e[24m after substitution. This
1129 modifier and its variations are useful in obscure situations such as
1130 wanting to set a variable at a point where a target's shell commands
1131 are being parsed. These assignment modifiers always expand to noth-
1134 The `
\e[1m::
\e[22m' helps avoid false matches with the AT&T System V UNIX style
1135 `:=' modifier and since substitution always occurs, the `::=' form
1136 is vaguely appropriate.
1138 \e[1m::?=
\e[4m
\e[22mstr
\e[0m
1139 As for
\e[1m::=
\e[22mbut only if the variable does not already have a value.
1141 \e[1m::+=
\e[4m
\e[22mstr
\e[0m
1142 Append
\e[4mstr
\e[24m to the variable.
1144 \e[1m::!=
\e[4m
\e[22mcmd
\e[0m
1145 Assign the output of
\e[4mcmd
\e[24m to the variable.
1147 \e[1m:[
\e[4m
\e[22mrange
\e[24m
\e[1m]
\e[0m
1148 Selects one or more words from the value, or performs other opera-
1149 tions related to the way in which the value is split into words.
1151 An empty value, or a value that consists entirely of white-space, is
1152 treated as a single word. For the purposes of the `
\e[1m:[]
\e[22m' modifier,
1153 the words are indexed both forwards using positive integers (where
1154 index 1 represents the first word), and backwards using negative in-
1155 tegers (where index -1 represents the last word).
1157 The
\e[4mrange
\e[24m is subjected to variable expansion, and the expanded re-
1158 sult is then interpreted as follows:
1160 \e[4mindex
\e[24m Selects a single word from the value.
1162 \e[4mstart
\e[24m
\e[1m..
\e[4m
\e[22mend
\e[0m
1163 Selects all words from
\e[4mstart
\e[24m to
\e[4mend
\e[24m, inclusive. For example,
1164 `
\e[1m:[2..-1]
\e[22m' selects all words from the second word to the last
1165 word. If
\e[4mstart
\e[24m is greater than
\e[4mend
\e[24m, the words are output in
1166 reverse order. For example, `
\e[1m:[-1..1]
\e[22m' selects all the words
1167 from last to first. If the list is already ordered, this ef-
1168 fectively reverses the list, but it is more efficient to use
1169 `
\e[1m:Or
\e[22m' instead of `
\e[1m:O:[-1..1]
\e[22m'.
1171 \e[1m*
\e[22mCauses subsequent modifiers to treat the value as a single
1172 word (possibly containing embedded whitespace). Analogous to
1173 the effect of $* in Bourne shell.
1175 0 Means the same as `
\e[1m:[*]
\e[22m'.
1177 \e[1m@
\e[22mCauses subsequent modifiers to treat the value as a sequence
1178 of words delimited by whitespace. Analogous to the effect of
1181 \e[1m#
\e[22mReturns the number of words in the value.
1183 \e[1mDIRECTIVES
\e[0m
1184 \e[1mbmake
\e[22moffers directives for including makefiles, conditionals and for
1185 loops. All these directives are identified by a line beginning with a
1186 single dot (`.') character, followed by the keyword of the directive,
1187 such as
\e[1minclude
\e[22mor
\e[1mif
\e[22m.
1189 \e[1mFile inclusion
\e[0m
1190 Files are included with either
\e[1m.include <
\e[4m
\e[22mfile
\e[24m
\e[1m>
\e[22mor
\e[1m.include "
\e[4m
\e[22mfile
\e[24m
\e[1m"
\e[22m. Vari-
1191 ables between the angle brackets or double quotes are expanded to form
1192 the file name. If angle brackets are used, the included makefile is ex-
1193 pected to be in the system makefile directory. If double quotes are
1194 used, the including makefile's directory and any directories specified
1195 using the
\e[1m-I
\e[22moption are searched before the system makefile directory.
1197 For compatibility with other make variants, `
\e[1minclude
\e[4m
\e[22mfile
\e[24m ...' (without
1198 leading dot) is also accepted.
1200 If the include statement is written as
\e[1m.-include
\e[22mor as
\e[1m.sinclude
\e[22m, errors
1201 locating and/or opening include files are ignored.
1203 If the include statement is written as
\e[1m.dinclude
\e[22m, not only are errors lo-
1204 cating and/or opening include files ignored, but stale dependencies
1205 within the included file are ignored just like in
\e[4m.MAKE.DEPENDFILE
\e[24m.
1207 \e[1mExporting variables
\e[0m
1208 The directives for exporting and unexporting variables are:
1210 \e[1m.export
\e[4m
\e[22mvariable
\e[24m ...
1211 Export the specified global variable. If no variable list is
1212 provided, all globals are exported except for internal variables
1213 (those that start with `.'). This is not affected by the
\e[1m-X
\e[0m
1214 flag, so should be used with caution. For compatibility with
1215 other make programs,
\e[1mexport
\e[4m
\e[22mvariable
\e[24m
\e[1m=
\e[4m
\e[22mvalue
\e[24m (without leading dot)
1218 Appending a variable name to
\e[4m.MAKE.EXPORTED
\e[24m is equivalent to ex-
1221 \e[1m.export-env
\e[4m
\e[22mvariable
\e[24m ...
1222 The same as `.export', except that the variable is not appended
1223 to
\e[4m.MAKE.EXPORTED
\e[24m. This allows exporting a value to the environ-
1224 ment which is different from that used by
\e[1mbmake
\e[22minternally.
1226 \e[1m.export-literal
\e[4m
\e[22mvariable
\e[24m ...
1227 The same as `.export-env', except that variables in the value are
1230 \e[1m.unexport
\e[4m
\e[22mvariable
\e[24m ...
1231 The opposite of `.export'. The specified global
\e[4mvariable
\e[24m is re-
1232 moved from
\e[4m.MAKE.EXPORTED
\e[24m. If no variable list is provided, all
1233 globals are unexported, and
\e[4m.MAKE.EXPORTED
\e[24m deleted.
1235 \e[1m.unexport-env
\e[0m
1236 Unexport all globals previously exported and clear the environ-
1237 ment inherited from the parent. This operation causes a memory
1238 leak of the original environment, so should be used sparingly.
1239 Testing for
\e[4m.MAKE.LEVEL
\e[24m being 0 would make sense. Also note that
1240 any variables which originated in the parent environment should
1241 be explicitly preserved if desired. For example:
1243 .if ${.MAKE.LEVEL} == 0
1249 Would result in an environment containing only `PATH', which is
1250 the minimal useful environment. Actually `
\e[4m.MAKE.LEVEL
\e[24m' is also
1251 pushed into the new environment.
1254 The directives for printing messages to the output are:
1256 \e[1m.info
\e[4m
\e[22mmessage
\e[0m
1257 The message is printed along with the name of the makefile and
1260 \e[1m.warning
\e[4m
\e[22mmessage
\e[0m
1261 The message prefixed by `warning:' is printed along with the name
1262 of the makefile and line number.
1264 \e[1m.error
\e[4m
\e[22mmessage
\e[0m
1265 The message is printed along with the name of the makefile and
1266 line number,
\e[1mbmake
\e[22mexits immediately.
1268 \e[1mConditionals
\e[0m
1269 The directives for conditionals are:
1271 \e[1m.if
\e[22m[
\e[1m!
\e[22m]
\e[4mexpression
\e[24m [
\e[4moperator
\e[24m
\e[4mexpression
\e[24m ...]
1272 Test the value of an expression.
1274 \e[1m.ifdef
\e[22m[
\e[1m!
\e[22m]
\e[4mvariable
\e[24m [
\e[4moperator
\e[24m
\e[4mvariable
\e[24m ...]
1275 Test whether a variable is defined.
1277 \e[1m.ifndef
\e[22m[
\e[1m!
\e[22m]
\e[4mvariable
\e[24m [
\e[4moperator
\e[24m
\e[4mvariable
\e[24m ...]
1278 Test whether a variable is not defined.
1280 \e[1m.ifmake
\e[22m[
\e[1m!
\e[22m]
\e[4mtarget
\e[24m [
\e[4moperator
\e[24m
\e[4mtarget
\e[24m ...]
1281 Test the target being requested.
1283 \e[1m.ifnmake
\e[22m[
\e[1m!
\e[22m]
\e[4mtarget
\e[24m [
\e[4moperator
\e[24m
\e[4mtarget
\e[24m ...]
1284 Test the target being requested.
1286 \e[1m.else
\e[22mReverse the sense of the last conditional.
1288 \e[1m.elif
\e[22m[
\e[1m!
\e[22m]
\e[4mexpression
\e[24m [
\e[4moperator
\e[24m
\e[4mexpression
\e[24m ...]
1289 A combination of `
\e[1m.else
\e[22m' followed by `
\e[1m.if
\e[22m'.
1291 \e[1m.elifdef
\e[22m[
\e[1m!
\e[22m]
\e[4mvariable
\e[24m [
\e[4moperator
\e[24m
\e[4mvariable
\e[24m ...]
1292 A combination of `
\e[1m.else
\e[22m' followed by `
\e[1m.ifdef
\e[22m'.
1294 \e[1m.elifndef
\e[22m[
\e[1m!
\e[22m]
\e[4mvariable
\e[24m [
\e[4moperator
\e[24m
\e[4mvariable
\e[24m ...]
1295 A combination of `
\e[1m.else
\e[22m' followed by `
\e[1m.ifndef
\e[22m'.
1297 \e[1m.elifmake
\e[22m[
\e[1m!
\e[22m]
\e[4mtarget
\e[24m [
\e[4moperator
\e[24m
\e[4mtarget
\e[24m ...]
1298 A combination of `
\e[1m.else
\e[22m' followed by `
\e[1m.ifmake
\e[22m'.
1300 \e[1m.elifnmake
\e[22m[
\e[1m!
\e[22m]
\e[4mtarget
\e[24m [
\e[4moperator
\e[24m
\e[4mtarget
\e[24m ...]
1301 A combination of `
\e[1m.else
\e[22m' followed by `
\e[1m.ifnmake
\e[22m'.
1303 \e[1m.endif
\e[22mEnd the body of the conditional.
1305 The
\e[4moperator
\e[24m may be any one of the following:
1307 \e[1m||
\e[22mLogical OR.
1309 \e[1m&&
\e[22mLogical AND; of higher precedence than `
\e[1m||
\e[22m'.
1311 \e[1mbmake
\e[22monly evaluates a conditional as far as is necessary to determine
1312 its value. Parentheses can be used to override the operator precedence.
1313 The boolean operator `
\e[1m!
\e[22m' may be used to logically negate an entire condi-
1314 tional. It is of higher precedence than `
\e[1m&&
\e[22m'.
1316 The value of
\e[4mexpression
\e[24m may be any of the following function call expres-
1319 \e[1mdefined
\e[22m(
\e[4mvarname
\e[24m)
1320 Evaluates to true if the variable
\e[4mvarname
\e[24m has been defined.
1322 \e[1mmake
\e[22m(
\e[4mtarget
\e[24m)
1323 Evaluates to true if the target was specified as part of
\e[1mbmake
\e[22m's
1324 command line or was declared the default target (either implic-
1325 itly or explicitly, see
\e[4m.MAIN
\e[24m) before the line containing the
1328 \e[1mempty
\e[22m(
\e[4mvarname
\e[24m[:
\e[4mmodifiers
\e[24m])
1329 Evaluates to true if the expansion of the variable, after apply-
1330 ing the modifiers, results in an empty string.
1332 \e[1mexists
\e[22m(
\e[4mpathname
\e[24m)
1333 Evaluates to true if the given pathname exists. If relative, the
1334 pathname is searched for on the system search path (see
\e[4m.PATH
\e[24m).
1336 \e[1mtarget
\e[22m(
\e[4mtarget
\e[24m)
1337 Evaluates to true if the target has been defined.
1339 \e[1mcommands
\e[22m(
\e[4mtarget
\e[24m)
1340 Evaluates to true if the target has been defined and has commands
1343 \e[4mExpression
\e[24m may also be an arithmetic or string comparison. Variable ex-
1344 pansion is performed on both sides of the comparison. If both sides are
1345 numeric and neither is enclosed in quotes, the comparison is done numeri-
1346 cally, otherwise lexicographically. A string is interpreted as hexadeci-
1347 mal integer if it is preceded by 0x, otherwise it is a decimal floating-
1348 point number; octal numbers are not supported.
1350 All comparisons may use the operators `
\e[1m==
\e[22m' and `
\e[1m!=
\e[22m'. Numeric comparisons
1351 may also use the operators `
\e[1m<
\e[22m', `
\e[1m<=
\e[22m', `
\e[1m>
\e[22m' and `
\e[1m>=
\e[22m'.
1353 If the comparison has neither a comparison operator nor a right side, the
1354 expression evaluates to true if it is nonempty and its numeric value (if
1357 When
\e[1mbmake
\e[22mis evaluating one of these conditional expressions, and it en-
1358 counters a (whitespace separated) word it doesn't recognize, either the
1359 "make" or "defined" function is applied to it, depending on the form of
1360 the conditional. If the form is `
\e[1m.ifdef
\e[22m', `
\e[1m.ifndef
\e[22m' or `
\e[1m.if
\e[22m', the
1361 "defined" function is applied. Similarly, if the form is `
\e[1m.ifmake
\e[22m' or
1362 `
\e[1m.ifnmake
\e[22m', the "make" function is applied.
1364 If the conditional evaluates to true, parsing of the makefile continues
1365 as before. If it evaluates to false, the following lines are skipped.
1366 In both cases, this continues until the corresponding `
\e[1m.else
\e[22m' or `
\e[1m.endif
\e[22m'
1370 For loops are typically used to apply a set of rules to a list of files.
1371 The syntax of a for loop is:
1373 \e[1m.for
\e[4m
\e[22mvariable
\e[24m [
\e[4mvariable
\e[24m ...]
\e[1min
\e[4m
\e[22mexpression
\e[0m
1374 <
\e[4mmake-lines
\e[24m>
1377 The
\e[4mexpression
\e[24m is expanded and then split into words. On each iteration
1378 of the loop, one word is taken and assigned to each
\e[4mvariable
\e[24m, in order,
1379 and these
\e[4mvariables
\e[24m are substituted into the
\e[4mmake-lines
\e[24m inside the body
1380 of the for loop. The number of words must come out even; that is, if
1381 there are three iteration variables, the number of words provided must be
1382 a multiple of three.
1384 If `
\e[1m.break
\e[22m' is encountered within a
\e[1m.for
\e[22mloop, it causes early termina-
1385 tion of the loop, otherwise a parse error.
1387 \e[1mOther directives
\e[0m
1388 \e[1m.undef
\e[4m
\e[22mvariable
\e[24m ...
1389 Un-define the specified global variables. Only global variables
1393 Comments begin with a hash (`#') character, anywhere but in a shell com-
1394 mand line, and continue to the end of an unescaped new line.
1396 \e[1mSPECIAL SOURCES (ATTRIBUTES)
\e[0m
1397 \e[1m.EXEC
\e[22mTarget is never out of date, but always execute commands any-
1400 \e[1m.IGNORE
\e[22mIgnore any errors from the commands associated with this tar-
1401 get, exactly as if they all were preceded by a dash (`-').
1403 \e[1m.MADE
\e[22mMark all sources of this target as being up to date.
1405 \e[1m.MAKE
\e[22mExecute the commands associated with this target even if the
\e[1m-n
\e[0m
1406 or
\e[1m-t
\e[22moptions were specified. Normally used to mark recursive
1409 \e[1m.META
\e[22mCreate a meta file for the target, even if it is flagged as
1410 \e[1m.PHONY
\e[22m,
\e[1m.MAKE
\e[22m, or
\e[1m.SPECIAL
\e[22m. Usage in conjunction with
\e[1m.MAKE
\e[22mis
1411 the most likely case. In "meta" mode, the target is out-of-
1412 date if the meta file is missing.
1414 \e[1m.NOMETA
\e[22mDo not create a meta file for the target. Meta files are also
1415 not created for
\e[1m.PHONY
\e[22m,
\e[1m.MAKE
\e[22m, or
\e[1m.SPECIAL
\e[22mtargets.
1417 \e[1m.NOMETA_CMP
\e[0m
1418 Ignore differences in commands when deciding if target is out
1419 of date. This is useful if the command contains a value which
1420 always changes. If the number of commands change, though, the
1421 target is still considered out of date. The same effect ap-
1422 plies to any command line that uses the variable
\e[4m.OODATE
\e[24m, which
1423 can be used for that purpose even when not otherwise needed or
1427 skip-compare-for-some:
1428 @echo this is compared
1429 @echo this is not ${.OODATE:M.NOMETA_CMP}
1430 @echo this is also compared
1432 The
\e[1m:M
\e[22mpattern suppresses any expansion of the unwanted vari-
1435 \e[1m.NOPATH
\e[22mDo not search for the target in the directories specified by
1438 \e[1m.NOTMAIN
\e[22mNormally
\e[1mbmake
\e[22mselects the first target it encounters as the
1439 default target to be built if no target was specified. This
1440 source prevents this target from being selected.
1443 If a target is marked with this attribute and
\e[1mbmake
\e[22mcan't fig-
1444 ure out how to create it, it ignores this fact and assumes the
1445 file isn't needed or already exists.
1447 \e[1m.PHONY
\e[22mThe target does not correspond to an actual file; it is always
1448 considered to be out of date, and is not created with the
\e[1m-t
\e[0m
1449 option. Suffix-transformation rules are not applied to
\e[1m.PHONY
\e[0m
1453 When
\e[1mbmake
\e[22mis interrupted, it normally removes any partially
1454 made targets. This source prevents the target from being re-
1457 \e[1m.RECURSIVE
\e[0m
1458 Synonym for
\e[1m.MAKE
\e[22m.
1460 \e[1m.SILENT
\e[22mDo not echo any of the commands associated with this target,
1461 exactly as if they all were preceded by an at sign (`@').
1463 \e[1m.USE
\e[22mTurn the target into
\e[1mbmake
\e[22m's version of a macro. When the tar-
1464 get is used as a source for another target, the other target
1465 acquires the commands, sources, and attributes (except for
1466 \e[1m.USE
\e[22m) of the source. If the target already has commands, the
1467 \e[1m.USE
\e[22mtarget's commands are appended to them.
1469 \e[1m.USEBEFORE
\e[0m
1470 Like
\e[1m.USE
\e[22m, but instead of appending, prepend the
\e[1m.USEBEFORE
\e[0m
1471 target commands to the target.
1473 \e[1m.WAIT
\e[22mIf
\e[1m.WAIT
\e[22mappears in a dependency line, the sources that precede
1474 it are made before the sources that succeed it in the line.
1475 Since the dependents of files are not made until the file it-
1476 self could be made, this also stops the dependents being built
1477 unless they are needed for another branch of the dependency
1489 the output is always `a', `b1', `b', `x'.
1491 The ordering imposed by
\e[1m.WAIT
\e[22mis only relevant for parallel
1494 \e[1mSPECIAL TARGETS
\e[0m
1495 Special targets may not be included with other targets, i.e. they must be
1496 the only target specified.
1498 \e[1m.BEGIN
\e[22mAny command lines attached to this target are executed before
1499 anything else is done.
1502 This is sort of a
\e[1m.USE
\e[22mrule for any target (that was used only
1503 as a source) that
\e[1mbmake
\e[22mcan't figure out any other way to cre-
1504 ate. Only the shell script is used. The
\e[4m.IMPSRC
\e[24m variable of a
1505 target that inherits
\e[1m.DEFAULT
\e[22m's commands is set to the target's
1508 \e[1m.DELETE_ON_ERROR
\e[0m
1509 If this target is present in the makefile, it globally causes
1510 make to delete targets whose commands fail. (By default, only
1511 targets whose commands are interrupted during execution are
1512 deleted. This is the historical behavior.) This setting can be
1513 used to help prevent half-finished or malformed targets from be-
1514 ing left around and corrupting future rebuilds.
1516 \e[1m.END
\e[22mAny command lines attached to this target are executed after ev-
1517 erything else is done successfully.
1519 \e[1m.ERROR
\e[22mAny command lines attached to this target are executed when an-
1520 other target fails. The
\e[4m.ERROR_TARGET
\e[24m variable is set to the
1521 target that failed. See also
\e[4mMAKE_PRINT_VAR_ON_ERROR
\e[24m.
1523 \e[1m.IGNORE
\e[22mMark each of the sources with the
\e[1m.IGNORE
\e[22mattribute. If no
1524 sources are specified, this is the equivalent of specifying the
1525 \e[1m-i
\e[22moption.
1527 \e[1m.INTERRUPT
\e[0m
1528 If
\e[1mbmake
\e[22mis interrupted, the commands for this target are exe-
1531 \e[1m.MAIN
\e[22mIf no target is specified when
\e[1mbmake
\e[22mis invoked, this target is
1534 \e[1m.MAKEFLAGS
\e[0m
1535 This target provides a way to specify flags for
\e[1mbmake
\e[22mat the
1536 time when the makefiles are read. The flags are as if typed to
1537 the shell, though the
\e[1m-f
\e[22moption has no effect.
1539 \e[1m.NOPATH
\e[22mApply the
\e[1m.NOPATH
\e[22mattribute to any specified sources.
1541 \e[1m.NOTPARALLEL
\e[0m
1542 Disable parallel mode.
1544 \e[1m.NO_PARALLEL
\e[0m
1545 Synonym for
\e[1m.NOTPARALLEL
\e[22m, for compatibility with other pmake
1548 \e[1m.NOREADONLY
\e[0m
1549 clear the read-only attribute from the global variables speci-
1552 \e[1m.OBJDIR
\e[22mThe source is a new value for `
\e[4m.OBJDIR
\e[24m'. If it exists,
\e[1mbmake
\e[0m
1553 changes the current working directory to it and updates the
1554 value of `
\e[4m.OBJDIR
\e[24m'.
1556 \e[1m.ORDER
\e[22mIn parallel mode, the named targets are made in sequence. This
1557 ordering does not add targets to the list of targets to be made.
1559 Since the dependents of a target do not get built until the tar-
1560 get itself could be built, unless `a' is built by another part
1561 of the dependency graph, the following is a dependency loop:
1566 \e[1m.PATH
\e[22mThe sources are directories which are to be searched for files
1567 not found in the current directory. If no sources are speci-
1568 fied, any previously specified directories are removed from the
1569 search path. If the source is the special
\e[1m.DOTLAST
\e[22mtarget, the
1570 current working directory is searched last.
1572 \e[1m.PATH.
\e[4m
\e[22msuffix
\e[0m
1573 Like
\e[1m.PATH
\e[22mbut applies only to files with a particular suffix.
1574 The suffix must have been previously declared with
\e[1m.SUFFIXES
\e[22m.
1576 \e[1m.PHONY
\e[22mApply the
\e[1m.PHONY
\e[22mattribute to any specified sources.
1578 \e[1m.POSIX
\e[22mIf this is the first non-comment line in the main makefile, the
1579 variable
\e[4m%POSIX
\e[24m is set to the value `1003.2' and the makefile
1580 `<posix.mk>' is included if it exists, to provide POSIX-compati-
1581 ble default rules. If
\e[1mbmake
\e[22mis run with the
\e[1m-r
\e[22mflag, only
1582 `posix.mk' contributes to the default rules.
1585 Apply the
\e[1m.PRECIOUS
\e[22mattribute to any specified sources. If no
1586 sources are specified, the
\e[1m.PRECIOUS
\e[22mattribute is applied to ev-
1587 ery target in the file.
1590 set the read-only attribute on the global variables specified as
1593 \e[1m.SHELL
\e[22mSets the shell that
\e[1mbmake
\e[22muses to execute commands in jobs mode.
1594 The sources are a set of
\e[4mfield
\e[24m
\e[1m=
\e[4m
\e[22mvalue
\e[24m pairs.
1596 name This is the minimal specification, used to select
1597 one of the built-in shell specs; sh, ksh, and csh.
1599 path Specifies the absolute path to the shell.
1601 hasErrCtl Indicates whether the shell supports exit on error.
1603 check The command to turn on error checking.
1605 ignore The command to disable error checking.
1607 echo The command to turn on echoing of commands executed.
1609 quiet The command to turn off echoing of commands exe-
1612 filter The output to filter after issuing the quiet com-
1613 mand. It is typically identical to quiet.
1615 errFlag The flag to pass the shell to enable error checking.
1617 echoFlag The flag to pass the shell to enable command echo-
1620 newline The string literal to pass the shell that results in
1621 a single newline character when used outside of any
1625 .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \
1626 check="set -e" ignore="set +e" \
1627 echo="set -v" quiet="set +v" filter="set +v" \
1628 echoFlag=v errFlag=e newline="'\n'"
1630 \e[1m.SILENT
\e[22mApply the
\e[1m.SILENT
\e[22mattribute to any specified sources. If no
1631 sources are specified, the
\e[1m.SILENT
\e[22mattribute is applied to every
1632 command in the file.
1634 \e[1m.STALE
\e[22mThis target gets run when a dependency file contains stale en-
1635 tries, having
\e[4m.ALLSRC
\e[24m set to the name of that dependency file.
1638 Each source specifies a suffix to
\e[1mbmake
\e[22m. If no sources are
1639 specified, any previously specified suffixes are deleted. It
1640 allows the creation of suffix-transformation rules.
1646 cc -o ${.TARGET} -c ${.IMPSRC}
1649 The sources are directories which are to be added to the system
1650 include path which
\e[1mbmake
\e[22msearches for makefiles. If no sources
1651 are specified, any previously specified directories are removed
1652 from the system include path.
1654 \e[1mENVIRONMENT
\e[0m
1655 \e[1mbmake
\e[22muses the following environment variables, if they exist: MACHINE,
1656 MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH,
1659 MAKEOBJDIRPREFIX and MAKEOBJDIR may only be set in the environment or on
1660 the command line to
\e[1mbmake
\e[22mand not as makefile variables; see the descrip-
1661 tion of `
\e[4m.OBJDIR
\e[24m' for more details.
1664 .depend list of dependencies
1665 makefile first default makefile if no makefile is specified on the
1667 Makefile second default makefile if no makefile is specified on the
1669 sys.mk system makefile
1670 /usr/share/mk system makefile directory
1672 \e[1mCOMPATIBILITY
\e[0m
1673 The basic make syntax is compatible between different make variants; how-
1674 ever the special variables, variable modifiers and conditionals are not.
1676 \e[1mOlder versions
\e[0m
1677 An incomplete list of changes in older versions of
\e[1mbmake
\e[22m:
1679 The way that .for loop variables are substituted changed after NetBSD 5.0
1680 so that they still appear to be variable expansions. In particular this
1681 stops them being treated as syntax, and removes some obscure problems us-
1682 ing them in .if statements.
1684 The way that parallel makes are scheduled changed in NetBSD 4.0 so that
1685 .ORDER and .WAIT apply recursively to the dependent nodes. The algo-
1686 rithms used may change again in the future.
1688 \e[1mOther make dialects
\e[0m
1689 Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not sup-
1690 port most of the features of
\e[1mbmake
\e[22mas described in this manual. Most no-
1693 \e[1m+
\bo
\e[22mThe
\e[1m.WAIT
\e[22mand
\e[1m.ORDER
\e[22mdeclarations and most functionality per-
1694 taining to parallelization. (GNU make supports parallelization
1695 but lacks the features needed to control it effectively.)
1697 \e[1m+
\bo
\e[22mDirectives, including for loops and conditionals and most of
1698 the forms of include files. (GNU make has its own incompatible
1699 and less powerful syntax for conditionals.)
1701 \e[1m+
\bo
\e[22mAll built-in variables that begin with a dot.
1703 \e[1m+
\bo
\e[22mMost of the special sources and targets that begin with a dot,
1704 with the notable exception of
\e[1m.PHONY
\e[22m,
\e[1m.PRECIOUS
\e[22m, and
\e[1m.SUFFIXES
\e[22m.
1706 \e[1m+
\bo
\e[22mVariable modifiers, except for the `:old=new' string substitu-
1707 tion, which does not portably support globbing with `%' and
1708 historically only works on declared suffixes.
1710 \e[1m+
\bo
\e[22mThe
\e[1m$>
\e[22mvariable even in its short form; most makes support this
1711 functionality but its name varies.
1713 Some features are somewhat more portable, such as assignment with
\e[1m+=
\e[22m,
\e[1m?=
\e[22m,
1714 and
\e[1m!=
\e[22m. The
\e[4m.PATH
\e[24m functionality is based on an older feature
\e[1mVPATH
\e[22mfound
1715 in GNU make and many versions of SVR4 make; however, historically its be-
1716 havior is too ill-defined (and too buggy) to rely upon.
1718 The
\e[1m$@
\e[22mand
\e[1m$<
\e[22mvariables are more or less universally portable, as is the
1719 \e[1m$(MAKE)
\e[22mvariable. Basic use of suffix rules (for files only in the cur-
1720 rent directory, not trying to chain transformations together, etc.) is
1721 also reasonably portable.
1727 \e[1mbmake
\e[22mis derived from NetBSD make(1). It uses autoconf to facilitate
1728 portability to other platforms.
1730 A make command appeared in Version 7 AT&T UNIX. This make implementation
1731 is based on Adam de Boor's pmake program, which was written for Sprite at
1732 Berkeley. It was designed to be a parallel distributed make running jobs
1733 on different machines using a daemon called "customs".
1735 Historically the target/dependency
\e[1mFRC
\e[22mhas been used to FoRCe rebuilding
1736 (since the target/dependency does not exist ... unless someone creates an
1737 \e[4mFRC
\e[24m file).
1740 The make syntax is difficult to parse. For instance, finding the end of
1741 a variable's use should involve scanning each of the modifiers, using the
1742 correct terminator for each field. In many places make just counts {}
1743 and () in order to find the end of a variable expansion.
1745 There is no way of escaping a space character in a filename.
1747 In jobs mode, when a target fails; make will put an error token into the
1748 job token pool. This will cause all other instances of make using that
1749 token pool to abort the build and exit with error code 6. Sometimes the
1750 attempt to suppress a cascade of unnecessary errors, can result in a
1751 seemingly unexplained `*** Error code 6'
1755 FreeBSD 13.0 March 22, 2023 FreeBSD 13.0