Annotation of src/usr.bin/make/make.1, Revision 1.252
1.252 ! sjg 1: .\" $NetBSD: make.1,v 1.251 2016/02/18 06:18:58 sjg Exp $
1.15 thorpej 2: .\"
1.16 christos 3: .\" Copyright (c) 1990, 1993
4: .\" The Regents of the University of California. All rights reserved.
1.1 cgd 5: .\"
6: .\" Redistribution and use in source and binary forms, with or without
7: .\" modification, are permitted provided that the following conditions
8: .\" are met:
9: .\" 1. Redistributions of source code must retain the above copyright
10: .\" notice, this list of conditions and the following disclaimer.
11: .\" 2. Redistributions in binary form must reproduce the above copyright
12: .\" notice, this list of conditions and the following disclaimer in the
13: .\" documentation and/or other materials provided with the distribution.
1.84 agc 14: .\" 3. Neither the name of the University nor the names of its contributors
1.1 cgd 15: .\" may be used to endorse or promote products derived from this software
16: .\" without specific prior written permission.
17: .\"
18: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28: .\" SUCH DAMAGE.
29: .\"
1.16 christos 30: .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
1.1 cgd 31: .\"
1.252 ! sjg 32: .Dd February 18, 2016
1.1 cgd 33: .Dt MAKE 1
34: .Os
35: .Sh NAME
36: .Nm make
37: .Nd maintain program dependencies
38: .Sh SYNOPSIS
1.74 wiz 39: .Nm
1.219 christos 40: .Op Fl BeikNnqrstWwX
1.159 sjg 41: .Op Fl C Ar directory
1.1 cgd 42: .Op Fl D Ar variable
43: .Op Fl d Ar flags
44: .Op Fl f Ar makefile
45: .Op Fl I Ar directory
1.104 wiz 46: .Op Fl J Ar private
47: .Op Fl j Ar max_jobs
1.13 christos 48: .Op Fl m Ar directory
1.44 sommerfe 49: .Op Fl T Ar file
1.16 christos 50: .Op Fl V Ar variable
1.1 cgd 51: .Op Ar variable=value
52: .Op Ar target ...
53: .Sh DESCRIPTION
1.25 lukem 54: .Nm
1.1 cgd 55: is a program designed to simplify the maintenance of other programs.
56: Its input is a list of specifications as to the files upon which programs
57: and other files depend.
1.128 dsl 58: If no
59: .Fl f Ar makefile
60: makefile option is given,
61: .Nm
62: will try to open
1.1 cgd 63: .Ql Pa makefile
1.128 dsl 64: then
1.1 cgd 65: .Ql Pa Makefile
1.128 dsl 66: in order to find the specifications.
1.1 cgd 67: If the file
68: .Ql Pa .depend
69: exists, it is read (see
1.66 wiz 70: .Xr mkdep 1 ) .
1.1 cgd 71: .Pp
72: This manual page is intended as a reference document only.
73: For a more thorough description of
1.25 lukem 74: .Nm
1.1 cgd 75: and makefiles, please refer to
1.197 dholland 76: .%T "PMake \- A Tutorial" .
1.1 cgd 77: .Pp
1.128 dsl 78: .Nm
79: will prepend the contents of the
80: .Va MAKEFLAGS
81: environment variable to the command line arguments before parsing them.
82: .Pp
1.1 cgd 83: The options are as follows:
84: .Bl -tag -width Ds
1.16 christos 85: .It Fl B
1.10 christos 86: Try to be backwards compatible by executing a single shell per command and
87: by executing the commands to make the sources of a dependency line in sequence.
1.159 sjg 88: .It Fl C Ar directory
89: Change to
90: .Ar directory
91: before reading the makefiles or doing anything else.
92: If multiple
93: .Fl C
94: options are specified, each is interpreted relative to the previous one:
95: .Fl C Pa / Fl C Pa etc
96: is equivalent to
97: .Fl C Pa /etc .
1.1 cgd 98: .It Fl D Ar variable
1.8 christos 99: Define
100: .Ar variable
1.1 cgd 101: to be 1, in the global context.
1.128 dsl 102: .It Fl d Ar [-]flags
1.1 cgd 103: Turn on debugging, and specify which portions of
1.25 lukem 104: .Nm
1.1 cgd 105: are to print debugging information.
1.128 dsl 106: Unless the flags are preceded by
1.194 sjg 107: .Ql \-
1.128 dsl 108: they are added to the
109: .Va MAKEFLAGS
110: environment variable and will be processed by any child make processes.
1.141 apb 111: By default, debugging information is printed to standard error,
1.138 apb 112: but this can be changed using the
1.140 wiz 113: .Ar F
1.138 apb 114: debugging flag.
1.139 apb 115: The debugging output is always unbuffered; in addition, if debugging
116: is enabled but debugging output is not directed to standard output,
117: then the standard output is line buffered.
1.1 cgd 118: .Ar Flags
119: is one or more of the following:
120: .Bl -tag -width Ds
121: .It Ar A
122: Print all possible debugging information;
123: equivalent to specifying all of the debugging flags.
124: .It Ar a
125: Print debugging information about archive searching and caching.
1.147 christos 126: .It Ar C
127: Print debugging information about current working directory.
1.1 cgd 128: .It Ar c
129: Print debugging information about conditional evaluation.
130: .It Ar d
131: Print debugging information about directory searching and caching.
1.88 jmmv 132: .It Ar e
133: Print debugging information about failed commands and targets.
1.138 apb 134: .It Ar F Ns Oo Sy \&+ Oc Ns Ar filename
135: Specify where debugging output is written.
136: This must be the last flag, because it consumes the remainder of
137: the argument.
138: If the character immediately after the
139: .Ql F
140: flag is
141: .Ql \&+ ,
142: then the file will be opened in append mode;
143: otherwise the file will be overwritten.
144: If the file name is
145: .Ql stdout
146: or
147: .Ql stderr
148: then debugging output will be written to the
149: standard output or standard error output file descriptors respectively
150: (and the
151: .Ql \&+
152: option has no effect).
153: Otherwise, the output will be written to the named file.
154: If the file name ends
1.128 dsl 155: .Ql .%d
156: then the
157: .Ql %d
158: is replaced by the pid.
1.87 jmmv 159: .It Ar f
160: Print debugging information about loop evaluation.
1.1 cgd 161: .It Ar "g1"
162: Print the input graph before making anything.
163: .It Ar "g2"
164: Print the input graph after making everything, or before exiting
1.93 dsl 165: on error.
1.92 dsl 166: .It Ar "g3"
167: Print the input graph before exiting on error.
1.1 cgd 168: .It Ar j
169: Print debugging information about running multiple shells.
1.135 sjg 170: .It Ar l
171: Print commands in Makefiles regardless of whether or not they are prefixed by
1.137 wiz 172: .Ql @
1.135 sjg 173: or other "quiet" flags.
174: Also known as "loud" behavior.
1.180 sjg 175: .It Ar M
176: Print debugging information about "meta" mode decisions about targets.
1.1 cgd 177: .It Ar m
178: Print debugging information about making targets, including modification
179: dates.
1.111 jmc 180: .It Ar n
1.154 apb 181: Don't delete the temporary command scripts created when running commands.
182: These temporary scripts are created in the directory
183: referred to by the
184: .Ev TMPDIR
185: environment variable, or in
1.112 wiz 186: .Pa /tmp
1.154 apb 187: if
188: .Ev TMPDIR
189: is unset or set to the empty string.
190: The temporary scripts are created by
191: .Xr mkstemp 3 ,
1.112 wiz 192: and have names of the form
1.154 apb 193: .Pa makeXXXXXX .
1.123 wiz 194: .Em NOTE :
1.156 snj 195: This can create many files in
1.154 apb 196: .Ev TMPDIR
197: or
198: .Pa /tmp ,
1.123 wiz 199: so use with care.
1.119 dsl 200: .It Ar p
201: Print debugging information about makefile parsing.
1.1 cgd 202: .It Ar s
203: Print debugging information about suffix-transformation rules.
204: .It Ar t
205: Print debugging information about target list maintenance.
1.205 sjg 206: .It Ar V
207: Force the
208: .Fl V
1.206 wiz 209: option to print raw values of variables.
1.1 cgd 210: .It Ar v
211: Print debugging information about variable assignment.
1.49 sjg 212: .It Ar x
1.57 wiz 213: Run shell commands with
214: .Fl x
215: so the actual commands are printed as they are executed.
1.1 cgd 216: .El
217: .It Fl e
1.68 perry 218: Specify that environment variables override macro assignments within
1.1 cgd 219: makefiles.
220: .It Fl f Ar makefile
221: Specify a makefile to read instead of the default
1.103 wiz 222: .Ql Pa makefile .
1.1 cgd 223: If
224: .Ar makefile
225: is
226: .Ql Fl ,
227: standard input is read.
1.103 wiz 228: Multiple makefiles may be specified, and are read in the order specified.
1.1 cgd 229: .It Fl I Ar directory
230: Specify a directory in which to search for makefiles and included makefiles.
1.13 christos 231: The system makefile directory (or directories, see the
232: .Fl m
233: option) is automatically included as part of this list.
1.1 cgd 234: .It Fl i
235: Ignore non-zero exit of shell commands in the makefile.
236: Equivalent to specifying
237: .Ql Fl
238: before each command line in the makefile.
1.44 sommerfe 239: .It Fl J Ar private
240: This option should
241: .Em not
242: be specified by the user.
243: .Pp
244: When the
245: .Ar j
246: option is in use in a recursive build, this option is passed by a make
247: to child makes to allow all the make processes in the build to
248: cooperate to avoid overloading the system.
1.1 cgd 249: .It Fl j Ar max_jobs
250: Specify the maximum number of jobs that
1.25 lukem 251: .Nm
1.67 grant 252: may have running at any one time.
1.180 sjg 253: The value is saved in
254: .Va .MAKE.JOBS .
1.67 grant 255: Turns compatibility mode off, unless the
1.11 christos 256: .Ar B
257: flag is also specified.
1.148 christos 258: When compatibility mode is off, all commands associated with a
259: target are executed in a single shell invocation as opposed to the
260: traditional one shell invocation per line.
261: This can break traditional scripts which change directories on each
262: command invocation and then expect to start with a fresh environment
263: on the next line.
264: It is more efficient to correct the scripts rather than turn backwards
265: compatibility on.
1.1 cgd 266: .It Fl k
267: Continue processing after errors are encountered, but only on those targets
268: that do not depend on the target whose creation caused the error.
1.13 christos 269: .It Fl m Ar directory
270: Specify a directory in which to search for sys.mk and makefiles included
1.99 wiz 271: via the
272: .Ao Ar file Ac Ns -style
273: include statement.
1.98 chuck 274: The
275: .Fl m
276: option can be used multiple times to form a search path.
1.13 christos 277: This path will override the default system include path: /usr/share/mk.
278: Furthermore the system include path will be appended to the search path used
1.99 wiz 279: for
280: .Qo Ar file Qc Ns -style
281: include statements (see the
1.13 christos 282: .Fl I
283: option).
1.98 chuck 284: .Pp
285: If a file or directory name in the
286: .Fl m
1.99 wiz 287: argument (or the
288: .Ev MAKESYSPATH
289: environment variable) starts with the string
290: .Qq \&.../
291: then
292: .Nm
293: will search for the specified file or directory named in the remaining part
294: of the argument string.
295: The search starts with the current directory of
1.98 chuck 296: the Makefile and then works upward towards the root of the filesystem.
1.99 wiz 297: If the search is successful, then the resulting directory replaces the
298: .Qq \&.../
299: specification in the
1.98 chuck 300: .Fl m
1.99 wiz 301: argument.
302: If used, this feature allows
1.98 chuck 303: .Nm
304: to easily search in the current source tree for customized sys.mk files
1.99 wiz 305: (e.g., by using
306: .Qq \&.../mk/sys.mk
307: as an argument).
1.1 cgd 308: .It Fl n
1.45 sommerfe 309: Display the commands that would have been executed, but do not
310: actually execute them unless the target depends on the .MAKE special
1.64 wiz 311: source (see below).
1.45 sommerfe 312: .It Fl N
313: Display the commands which would have been executed, but do not
314: actually execute any of them; useful for debugging top-level makefiles
315: without descending into subdirectories.
1.1 cgd 316: .It Fl q
317: Do not execute any commands, but exit 0 if the specified targets are
318: up-to-date and 1, otherwise.
319: .It Fl r
320: Do not use the built-in rules specified in the system makefile.
321: .It Fl s
322: Do not echo any commands as they are executed.
323: Equivalent to specifying
324: .Ql Ic @
325: before each command line in the makefile.
1.44 sommerfe 326: .It Fl T Ar tracefile
327: When used with the
1.48 wiz 328: .Fl j
1.44 sommerfe 329: flag,
330: append a trace record to
331: .Ar tracefile
332: for each job started and completed.
1.1 cgd 333: .It Fl t
334: Rather than re-building a target as specified in the makefile, create it
335: or update its modification time to make it appear up-to-date.
1.16 christos 336: .It Fl V Ar variable
337: Print
1.74 wiz 338: .Nm Ns 's
1.16 christos 339: idea of the value of
340: .Ar variable ,
341: in the global context.
342: Do not build any targets.
343: Multiple instances of this option may be specified;
344: the variables will be printed one per line,
345: with a blank line for each null or undefined variable.
1.85 sjg 346: If
347: .Ar variable
348: contains a
349: .Ql \&$
350: then the value will be expanded before printing.
1.46 christos 351: .It Fl W
352: Treat any warnings during makefile parsing as errors.
1.238 dholland 353: .It Fl w
354: Print entering and leaving directory messages, pre and post processing.
1.75 thorpej 355: .It Fl X
356: Don't export variables passed on the command line to the environment
357: individually.
358: Variables passed on the command line are still exported
359: via the
360: .Va MAKEFLAGS
361: environment variable.
362: This option may be useful on systems which have a small limit on the
363: size of command arguments.
1.1 cgd 364: .It Ar variable=value
365: Set the value of the variable
366: .Ar variable
367: to
368: .Ar value .
1.75 thorpej 369: Normally, all values passed on the command line are also exported to
370: sub-makes in the environment.
371: The
372: .Fl X
373: flag disables this behavior.
1.101 wiz 374: Variable assignments should follow options for POSIX compatibility
1.100 ross 375: but no ordering is enforced.
1.1 cgd 376: .El
377: .Pp
1.6 cgd 378: There are seven different types of lines in a makefile: file dependency
1.1 cgd 379: specifications, shell commands, variable assignments, include statements,
1.6 cgd 380: conditional directives, for loops, and comments.
1.1 cgd 381: .Pp
382: In general, lines may be continued from one line to the next by ending
383: them with a backslash
384: .Pq Ql \e .
1.237 dholland 385: The trailing newline character and initial whitespace on the following
386: line are compressed into a single space.
1.1 cgd 387: .Sh FILE DEPENDENCY SPECIFICATIONS
1.237 dholland 388: Dependency lines consist of one or more targets, an operator, and zero
389: or more sources.
1.137 wiz 390: This creates a relationship where the targets
391: .Dq depend
392: on the sources
1.1 cgd 393: and are usually created from them.
394: The exact relationship between the target and the source is determined
1.237 dholland 395: by the operator that separates them.
1.1 cgd 396: The three operators are as follows:
397: .Bl -tag -width flag
398: .It Ic \&:
399: A target is considered out-of-date if its modification time is less than
400: those of any of its sources.
401: Sources for a target accumulate over dependency lines when this operator
402: is used.
403: The target is removed if
1.25 lukem 404: .Nm
1.1 cgd 405: is interrupted.
406: .It Ic \&!
407: Targets are always re-created, but not until all sources have been
408: examined and re-created as necessary.
409: Sources for a target accumulate over dependency lines when this operator
410: is used.
411: The target is removed if
1.25 lukem 412: .Nm
1.1 cgd 413: is interrupted.
414: .It Ic \&::
415: If no sources are specified, the target is always re-created.
416: Otherwise, a target is considered out-of-date if any of its sources has
417: been modified more recently than the target.
418: Sources for a target do not accumulate over dependency lines when this
1.237 dholland 419: operator is used.
1.1 cgd 420: The target will not be removed if
1.25 lukem 421: .Nm
1.1 cgd 422: is interrupted.
423: .El
424: .Pp
425: Targets and sources may contain the shell wildcard values
1.80 wiz 426: .Ql \&? ,
1.1 cgd 427: .Ql * ,
1.103 wiz 428: .Ql [] ,
1.1 cgd 429: and
430: .Ql {} .
431: The values
1.80 wiz 432: .Ql \&? ,
1.103 wiz 433: .Ql * ,
1.1 cgd 434: and
435: .Ql []
436: may only be used as part of the final
437: component of the target or source, and must be used to describe existing
438: files.
439: The value
440: .Ql {}
441: need not necessarily be used to describe existing files.
442: Expansion is in directory order, not alphabetically as done in the shell.
443: .Sh SHELL COMMANDS
1.239 dholland 444: Each target may have associated with it one or more lines of shell
445: commands, normally
1.237 dholland 446: used to create the target.
1.239 dholland 447: Each of the lines in this script
1.1 cgd 448: .Em must
449: be preceded by a tab.
1.239 dholland 450: (For historical reasons, spaces are not accepted.)
451: While targets can appear in many dependency lines if desired, by
452: default only one of these rules may be followed by a creation
453: script.
454: If the
1.91 lukem 455: .Ql Ic \&::
1.239 dholland 456: operator is used, however, all rules may include scripts and the
457: scripts are executed in the order found.
1.1 cgd 458: .Pp
1.239 dholland 459: Each line is treated as a separate shell command, unless the end of
460: line is escaped with a backslash
461: .Pq Ql \e
462: in which case that line and the next are combined.
463: .\" The escaped newline is retained and passed to the shell, which
464: .\" normally ignores it.
465: .\" However, the tab at the beginning of the following line is removed.
466: If the first characters of the command are any combination of
1.102 sjg 467: .Ql Ic @ ,
1.103 wiz 468: .Ql Ic + ,
1.102 sjg 469: or
1.1 cgd 470: .Ql Ic \- ,
471: the command is treated specially.
472: A
473: .Ql Ic @
474: causes the command not to be echoed before it is executed.
475: A
1.102 sjg 476: .Ql Ic +
477: causes the command to be executed even when
478: .Fl n
479: is given.
480: This is similar to the effect of the .MAKE special source,
481: except that the effect can be limited to a single line of a script.
482: A
1.1 cgd 483: .Ql Ic \-
1.246 wiz 484: in compatibility mode
1.1 cgd 485: causes any non-zero exit status of the command line to be ignored.
1.210 sjg 486: .Pp
487: When
488: .Nm
489: is run in jobs mode with
490: .Fl j Ar max_jobs ,
491: the entire script for the target is fed to a
492: single instance of the shell.
493: In compatibility (non-jobs) mode, each command is run in a separate process.
494: If the command contains any shell meta characters
495: .Pq Ql #=|^(){};&<>*?[]:$`\e\en
1.239 dholland 496: it will be passed to the shell; otherwise
1.210 sjg 497: .Nm
498: will attempt direct execution.
1.244 sjg 499: If a line starts with
1.246 wiz 500: .Ql Ic \-
1.244 sjg 501: and the shell has ErrCtl enabled then failure of the command line
502: will be ignored as in compatibility mode.
1.246 wiz 503: Otherwise
1.244 sjg 504: .Ql Ic \-
505: affects the entire job;
506: the script will stop at the first command line that fails,
507: but the target will not be deemed to have failed.
1.210 sjg 508: .Pp
509: Makefiles should be written so that the mode of
510: .Nm
511: operation does not change their behavior.
512: For example, any command which needs to use
513: .Dq cd
514: or
1.239 dholland 515: .Dq chdir
516: without potentially changing the directory for subsequent commands
517: should be put in parentheses so it executes in a subshell.
518: To force the use of one shell, escape the line breaks so as to make
519: the whole script one command.
520: For example:
1.210 sjg 521: .Bd -literal -offset indent
522: avoid-chdir-side-effects:
523: @echo Building $@ in `pwd`
1.239 dholland 524: @(cd ${.CURDIR} && ${MAKE} $@)
1.210 sjg 525: @echo Back in `pwd`
526:
527: ensure-one-shell-regardless-of-mode:
1.243 apb 528: @echo Building $@ in `pwd`; \e
529: (cd ${.CURDIR} && ${MAKE} $@); \e
1.210 sjg 530: echo Back in `pwd`
531: .Ed
1.239 dholland 532: .Pp
533: Since
534: .Nm
535: will
536: .Xr chdir 2
537: to
538: .Ql Va .OBJDIR
539: before executing any targets, each child process
540: starts with that as its current working directory.
1.1 cgd 541: .Sh VARIABLE ASSIGNMENTS
542: Variables in make are much like variables in the shell, and, by tradition,
543: consist of all upper-case letters.
1.91 lukem 544: .Ss Variable assignment modifiers
1.1 cgd 545: The five operators that can be used to assign values to variables are as
546: follows:
547: .Bl -tag -width Ds
548: .It Ic \&=
549: Assign the value to the variable.
550: Any previous value is overridden.
551: .It Ic \&+=
552: Append the value to the current value of the variable.
553: .It Ic \&?=
554: Assign the value to the variable if it is not already defined.
555: .It Ic \&:=
556: Assign with expansion, i.e. expand the value before assigning it
557: to the variable.
558: Normally, expansion is not done until the variable is referenced.
1.124 sjg 559: .Em NOTE :
560: References to undefined variables are
561: .Em not
1.125 wiz 562: expanded.
563: This can cause problems when variable modifiers are used.
1.1 cgd 564: .It Ic \&!=
565: Expand the value and pass it to the shell for execution and assign
566: the result to the variable.
567: Any newlines in the result are replaced with spaces.
568: .El
569: .Pp
570: Any white-space before the assigned
571: .Ar value
572: is removed; if the value is being appended, a single space is inserted
573: between the previous contents of the variable and the appended value.
574: .Pp
575: Variables are expanded by surrounding the variable name with either
576: curly braces
577: .Pq Ql {}
1.7 mycroft 578: or parentheses
1.1 cgd 579: .Pq Ql ()
580: and preceding it with
581: a dollar sign
582: .Pq Ql \&$ .
583: If the variable name contains only a single letter, the surrounding
1.7 mycroft 584: braces or parentheses are not required.
1.1 cgd 585: This shorter form is not recommended.
586: .Pp
1.149 dsl 587: If the variable name contains a dollar, then the name itself is expanded first.
588: This allows almost arbitrary variable names, however names containing dollar,
589: braces, parenthesis, or whitespace are really best avoided!
590: .Pp
591: If the result of expanding a variable contains a dollar sign
592: .Pq Ql \&$
593: the string is expanded again.
594: .Pp
1.175 christos 595: Variable substitution occurs at three distinct times, depending on where
1.1 cgd 596: the variable is being used.
1.175 christos 597: .Bl -enum
1.176 wiz 598: .It
1.1 cgd 599: Variables in dependency lines are expanded as the line is read.
1.175 christos 600: .It
1.1 cgd 601: Variables in shell commands are expanded when the shell command is
602: executed.
1.175 christos 603: .It
604: .Dq .for
1.176 wiz 605: loop index variables are expanded on each loop iteration.
606: Note that other variables are not expanded inside loops so
1.175 christos 607: the following example code:
608: .Bd -literal -offset indent
609:
610: .Dv .for i in 1 2 3
611: a+= ${i}
612: j= ${i}
613: b+= ${j}
614: .Dv .endfor
615:
616: all:
1.176 wiz 617: @echo ${a}
1.175 christos 618: @echo ${b}
619:
620: .Ed
621: will print:
622: .Bd -literal -offset indent
623: 1 2 3
624: 3 3 3
625:
626: .Ed
627: Because while ${a} contains
628: .Dq 1 2 3
629: after the loop is executed, ${b}
630: contains
631: .Dq ${j} ${j} ${j}
632: which expands to
633: .Dq 3 3 3
634: since after the loop completes ${j} contains
635: .Dq 3 .
636: .El
1.91 lukem 637: .Ss Variable classes
1.1 cgd 638: The four different classes of variables (in order of increasing precedence)
639: are:
640: .Bl -tag -width Ds
641: .It Environment variables
642: Variables defined as part of
1.74 wiz 643: .Nm Ns 's
1.1 cgd 644: environment.
645: .It Global variables
646: Variables defined in the makefile or in included makefiles.
647: .It Command line variables
648: Variables defined as part of the command line.
649: .It Local variables
1.237 dholland 650: Variables that are defined specific to a certain target.
1.240 dholland 651: .El
652: .Pp
653: Local variables are all built in and their values vary magically from
654: target to target.
655: It is not currently possible to define new local variables.
1.237 dholland 656: The seven local variables are as follows:
1.240 dholland 657: .Bl -tag -width ".ARCHIVE" -offset indent
1.1 cgd 658: .It Va .ALLSRC
659: The list of all sources for this target; also known as
1.62 ross 660: .Ql Va \&\*[Gt] .
1.1 cgd 661: .It Va .ARCHIVE
1.240 dholland 662: The name of the archive file; also known as
663: .Ql Va \&! .
1.1 cgd 664: .It Va .IMPSRC
1.237 dholland 665: In suffix-transformation rules, the name/path of the source from which the
1.137 wiz 666: target is to be transformed (the
667: .Dq implied
1.237 dholland 668: source); also known as
1.62 ross 669: .Ql Va \&\*[Lt] .
1.237 dholland 670: It is not defined in explicit rules.
1.1 cgd 671: .It Va .MEMBER
1.240 dholland 672: The name of the archive member; also known as
673: .Ql Va % .
1.1 cgd 674: .It Va .OODATE
675: The list of sources for this target that were deemed out-of-date; also
676: known as
677: .Ql Va \&? .
678: .It Va .PREFIX
1.177 dholland 679: The file prefix of the target, containing only the file portion, no suffix
1.1 cgd 680: or preceding directory components; also known as
681: .Ql Va * .
1.240 dholland 682: The suffix must be one of the known suffixes declared with
683: .Ic .SUFFIXES
684: or it will not be recognized.
1.1 cgd 685: .It Va .TARGET
686: The name of the target; also known as
687: .Ql Va @ .
688: .El
689: .Pp
1.237 dholland 690: The shorter forms
1.240 dholland 691: .Ql ( Va \*[Gt] ,
692: .Ql Va \&! ,
693: .Ql Va \*[Lt] ,
694: .Ql Va % ,
1.80 wiz 695: .Ql Va \&? ,
1.240 dholland 696: .Ql Va * ,
1.1 cgd 697: and
1.240 dholland 698: .Ql Va @ )
1.237 dholland 699: are permitted for backward
1.240 dholland 700: compatibility with historical makefiles and legacy POSIX make and are
701: not recommended.
702: .Pp
703: Variants of these variables with the punctuation followed immediately by
704: .Ql D
705: or
706: .Ql F ,
707: e.g.
708: .Ql Va $(@D) ,
709: are legacy forms equivalent to using the
710: .Ql :H
1.1 cgd 711: and
1.240 dholland 712: .Ql :T
713: modifiers.
714: These forms are accepted for compatibility with
1.237 dholland 715: .At V
1.240 dholland 716: makefiles and POSIX but are not recommended.
1.1 cgd 717: .Pp
718: Four of the local variables may be used in sources on dependency lines
719: because they expand to the proper value for each target on the line.
720: These variables are
721: .Ql Va .TARGET ,
722: .Ql Va .PREFIX ,
723: .Ql Va .ARCHIVE ,
724: and
725: .Ql Va .MEMBER .
1.145 christos 726: .Ss Additional built-in variables
1.1 cgd 727: In addition,
1.25 lukem 728: .Nm
1.1 cgd 729: sets or knows about the following variables:
1.50 sjg 730: .Bl -tag -width .MAKEOVERRIDES
1.1 cgd 731: .It Va \&$
732: A single dollar sign
733: .Ql \&$ ,
734: i.e.
735: .Ql \&$$
736: expands to a single dollar
737: sign.
1.56 tv 738: .It Va .ALLTARGETS
1.67 grant 739: The list of all targets encountered in the Makefile.
740: If evaluated during
1.56 tv 741: Makefile parsing, lists only those targets encountered thus far.
1.1 cgd 742: .It Va .CURDIR
743: A path to the directory where
1.25 lukem 744: .Nm
1.1 cgd 745: was executed.
1.117 lukem 746: Refer to the description of
747: .Ql Ev PWD
748: for more details.
1.230 sjg 749: .It Va .INCLUDEDFROMDIR
750: The directory of the file this Makefile was included from.
751: .It Va .INCLUDEDFROMFILE
752: The filename of the file this Makefile was included from.
1.78 christos 753: .It Ev MAKE
1.55 tv 754: The name that
755: .Nm
1.89 sjg 756: was executed with
757: .Pq Va argv[0] .
1.126 reed 758: For compatibility
1.78 christos 759: .Nm
760: also sets
761: .Va .MAKE
762: with the same value.
1.97 lukem 763: The preferred variable to use is the environment variable
1.78 christos 764: .Ev MAKE
765: because it is more compatible with other versions of
766: .Nm
767: and cannot be confused with the special target with the same name.
1.168 sjg 768: .It Va .MAKE.DEPENDFILE
1.169 wiz 769: Names the makefile (default
1.168 sjg 770: .Ql Pa .depend )
771: from which generated dependencies are read.
1.205 sjg 772: .It Va .MAKE.EXPAND_VARIABLES
773: A boolean that controls the default behavior of the
774: .Fl V
775: option.
1.134 sjg 776: .It Va .MAKE.EXPORTED
777: The list of variables exported by
778: .Nm .
1.171 sjg 779: .It Va .MAKE.JOBS
1.172 joerg 780: The argument to the
1.171 sjg 781: .Fl j
782: option.
1.132 sjg 783: .It Va .MAKE.JOB.PREFIX
1.137 wiz 784: If
1.132 sjg 785: .Nm
786: is run with
787: .Ar j
1.137 wiz 788: then output for each target is prefixed with a token
1.132 sjg 789: .Ql --- target ---
790: the first part of which can be controlled via
791: .Va .MAKE.JOB.PREFIX .
1.225 wiz 792: If
1.220 sjg 793: .Va .MAKE.JOB.PREFIX
794: is empty, no token is printed.
1.132 sjg 795: .br
1.137 wiz 796: For example:
1.132 sjg 797: .Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
798: would produce tokens like
799: .Ql ---make[1234] target ---
800: making it easier to track the degree of parallelism being achieved.
1.1 cgd 801: .It Ev MAKEFLAGS
802: The environment variable
803: .Ql Ev MAKEFLAGS
804: may contain anything that
805: may be specified on
1.74 wiz 806: .Nm Ns 's
1.1 cgd 807: command line.
808: Anything specified on
1.74 wiz 809: .Nm Ns 's
1.1 cgd 810: command line is appended to the
811: .Ql Ev MAKEFLAGS
812: variable which is then
813: entered into the environment for all programs which
1.25 lukem 814: .Nm
1.1 cgd 815: executes.
1.169 wiz 816: .It Va .MAKE.LEVEL
817: The recursion depth of
818: .Nm .
819: The initial instance of
820: .Nm
821: will be 0, and an incremented value is put into the environment
822: to be seen by the next generation.
823: This allows tests like:
824: .Li .if ${.MAKE.LEVEL} == 0
825: to protect things which should only be evaluated in the initial instance of
826: .Nm .
827: .It Va .MAKE.MAKEFILE_PREFERENCE
828: The ordered list of makefile names
829: (default
830: .Ql Pa makefile ,
831: .Ql Pa Makefile )
832: that
833: .Nm
834: will look for.
835: .It Va .MAKE.MAKEFILES
836: The list of makefiles read by
837: .Nm ,
838: which is useful for tracking dependencies.
1.204 sjg 839: Each makefile is recorded only once, regardless of the number of times read.
1.169 wiz 840: .It Va .MAKE.MODE
841: Processed after reading all makefiles.
842: Can affect the mode that
843: .Nm
844: runs in.
1.180 sjg 845: It can contain a number of keywords:
846: .Bl -hang -width ignore-cmd
847: .It Pa compat
1.182 wiz 848: Like
1.184 sjg 849: .Fl B ,
1.182 wiz 850: puts
1.180 sjg 851: .Nm
852: into "compat" mode.
853: .It Pa meta
854: Puts
855: .Nm
1.182 wiz 856: into "meta" mode, where meta files are created for each target
1.180 sjg 857: to capture the command run, the output generated and if
858: .Xr filemon 4
859: is available, the system calls which are of interest to
860: .Nm .
861: The captured output can be very useful when diagnosing errors.
1.185 sjg 862: .It Pa curdirOk= Ar bf
1.184 sjg 863: Normally
864: .Nm
865: will not create .meta files in
866: .Ql Va .CURDIR .
867: This can be overridden by setting
1.188 wiz 868: .Va bf
1.184 sjg 869: to a value which represents True.
1.200 sjg 870: .It Pa env
871: For debugging, it can be useful to inlcude the environment
872: in the .meta file.
1.180 sjg 873: .It Pa verbose
874: If in "meta" mode, print a clue about the target being built.
875: This is useful if the build is otherwise running silently.
876: The message printed the value of:
877: .Va .MAKE.META.PREFIX .
878: .It Pa ignore-cmd
879: Some makefiles have commands which are simply not stable.
1.182 wiz 880: This keyword causes them to be ignored for
1.180 sjg 881: determining whether a target is out of date in "meta" mode.
882: See also
883: .Ic .NOMETA_CMP .
1.195 sjg 884: .It Pa silent= Ar bf
885: If
886: .Va bf
887: is True, when a .meta file is created, mark the target
1.200 sjg 888: .Ic .SILENT .
1.180 sjg 889: .El
1.189 sjg 890: .It Va .MAKE.META.BAILIWICK
891: In "meta" mode, provides a list of prefixes which
892: match the directories controlled by
893: .Nm .
894: If a file that was generated outside of
895: .Va .OBJDIR
896: but within said bailiwick is missing,
897: the current target is considered out-of-date.
1.180 sjg 898: .It Va .MAKE.META.CREATED
899: In "meta" mode, this variable contains a list of all the meta files
900: updated.
901: If not empty, it can be used to trigger processing of
902: .Va .MAKE.META.FILES .
903: .It Va .MAKE.META.FILES
904: In "meta" mode, this variable contains a list of all the meta files
905: used (updated or not).
1.182 wiz 906: This list can be used to process the meta files to extract dependency
1.180 sjg 907: information.
1.216 sjg 908: .It Va .MAKE.META.IGNORE_PATHS
909: Provides a list of path prefixes that should be ignored;
910: because the contents are expected to change over time.
911: The default list includes:
912: .Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
1.180 sjg 913: .It Va .MAKE.META.PREFIX
914: Defines the message printed for each meta file updated in "meta verbose" mode.
915: The default value is:
916: .Dl Building ${.TARGET:H:tA}/${.TARGET:T}
1.50 sjg 917: .It Va .MAKEOVERRIDES
1.57 wiz 918: This variable is used to record the names of variables assigned to
919: on the command line, so that they may be exported as part of
1.50 sjg 920: .Ql Ev MAKEFLAGS .
1.57 wiz 921: This behaviour can be disabled by assigning an empty value to
1.50 sjg 922: .Ql Va .MAKEOVERRIDES
1.67 grant 923: within a makefile.
924: Extra variables can be exported from a makefile
1.57 wiz 925: by appending their names to
1.51 sjg 926: .Ql Va .MAKEOVERRIDES .
927: .Ql Ev MAKEFLAGS
1.57 wiz 928: is re-exported whenever
1.51 sjg 929: .Ql Va .MAKEOVERRIDES
930: is modified.
1.212 sjg 931: .It Va .MAKE.PATH_FILEMON
932: If
933: .Nm
1.217 wiz 934: was built with
1.212 sjg 935: .Xr filemon 4
936: support, this is set to the path of the device node.
937: This allows makefiles to test for this support.
1.169 wiz 938: .It Va .MAKE.PID
939: The process-id of
940: .Nm .
941: .It Va .MAKE.PPID
942: The parent process-id of
943: .Nm .
1.55 tv 944: .It Va MAKE_PRINT_VAR_ON_ERROR
1.57 wiz 945: When
1.55 tv 946: .Nm
947: stops due to an error, it prints its name and the value of
948: .Ql Va .CURDIR
1.57 wiz 949: as well as the value of any variables named in
1.55 tv 950: .Ql Va MAKE_PRINT_VAR_ON_ERROR .
951: .It Va .newline
952: This variable is simply assigned a newline character as its value.
1.91 lukem 953: This allows expansions using the
954: .Cm \&:@
955: modifier to put a newline between
1.67 grant 956: iterations of the loop rather than a space.
957: For example, the printing of
1.55 tv 958: .Ql Va MAKE_PRINT_VAR_ON_ERROR
959: could be done as ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
960: .It Va .OBJDIR
961: A path to the directory where the targets are built.
1.117 lukem 962: Its value is determined by trying to
963: .Xr chdir 2
964: to the following directories in order and using the first match:
965: .Bl -enum
966: .It
1.118 wiz 967: .Ev ${MAKEOBJDIRPREFIX}${.CURDIR}
968: .Pp
1.117 lukem 969: (Only if
970: .Ql Ev MAKEOBJDIRPREFIX
971: is set in the environment or on the command line.)
972: .It
1.118 wiz 973: .Ev ${MAKEOBJDIR}
974: .Pp
1.117 lukem 975: (Only if
976: .Ql Ev MAKEOBJDIR
977: is set in the environment or on the command line.)
978: .It
979: .Ev ${.CURDIR} Ns Pa /obj. Ns Ev ${MACHINE}
980: .It
981: .Ev ${.CURDIR} Ns Pa /obj
982: .It
983: .Pa /usr/obj/ Ns Ev ${.CURDIR}
984: .It
985: .Ev ${.CURDIR}
986: .El
987: .Pp
988: Variable expansion is performed on the value before it's used,
989: so expressions such as
1.173 sjg 990: .Dl ${.CURDIR:S,^/usr/src,/var/obj,}
1.117 lukem 991: may be used.
1.173 sjg 992: This is especially useful with
993: .Ql Ev MAKEOBJDIR .
1.117 lukem 994: .Pp
995: .Ql Va .OBJDIR
1.248 sjg 996: may be modified in the makefile via the special target
997: .Ql Ic .OBJDIR .
1.137 wiz 998: In all cases,
1.117 lukem 999: .Nm
1000: will
1001: .Xr chdir 2
1.248 sjg 1002: to the specified directory if it exists, and set
1.117 lukem 1003: .Ql Va .OBJDIR
1.248 sjg 1004: and
1.117 lukem 1005: .Ql Ev PWD
1006: to that directory before executing any targets.
1007: .
1.55 tv 1008: .It Va .PARSEDIR
1009: A path to the directory of the current
1010: .Ql Pa Makefile
1011: being parsed.
1012: .It Va .PARSEFILE
1013: The basename of the current
1014: .Ql Pa Makefile
1015: being parsed.
1016: This variable and
1017: .Ql Va .PARSEDIR
1018: are both set only while the
1019: .Ql Pa Makefiles
1020: are being parsed.
1.196 christos 1021: If you want to retain their current values, assign them to a variable
1022: using assignment with expansion:
1023: .Pq Ql Cm \&:= .
1.69 sjg 1024: .It Va .PATH
1.82 wiz 1025: A variable that represents the list of directories that
1.69 sjg 1026: .Nm
1.70 wiz 1027: will search for files.
1028: The search list should be updated using the target
1.69 sjg 1029: .Ql Va .PATH
1030: rather than the variable.
1.16 christos 1031: .It Ev PWD
1032: Alternate path to the current directory.
1.25 lukem 1033: .Nm
1.16 christos 1034: normally sets
1035: .Ql Va .CURDIR
1036: to the canonical path given by
1.48 wiz 1037: .Xr getcwd 3 .
1.16 christos 1038: However, if the environment variable
1039: .Ql Ev PWD
1040: is set and gives a path to the current directory, then
1.25 lukem 1041: .Nm
1.16 christos 1042: sets
1043: .Ql Va .CURDIR
1044: to the value of
1045: .Ql Ev PWD
1.67 grant 1046: instead.
1047: This behaviour is disabled if
1.40 sjg 1048: .Ql Ev MAKEOBJDIRPREFIX
1.117 lukem 1049: is set or
1050: .Ql Ev MAKEOBJDIR
1051: contains a variable transform.
1.16 christos 1052: .Ql Ev PWD
1053: is set to the value of
1054: .Ql Va .OBJDIR
1055: for all programs which
1.25 lukem 1056: .Nm
1.16 christos 1057: executes.
1.179 dholland 1058: .It Ev .TARGETS
1059: The list of targets explicitly specified on the command line, if any.
1.145 christos 1060: .It Ev VPATH
1.146 wiz 1061: Colon-separated
1062: .Pq Dq \&:
1063: lists of directories that
1064: .Nm
1065: will search for files.
1.145 christos 1066: The variable is supported for compatibility with old make programs only,
1067: use
1068: .Ql Va .PATH
1069: instead.
1.1 cgd 1070: .El
1.91 lukem 1071: .Ss Variable modifiers
1.1 cgd 1072: Variable expansion may be modified to select or modify each word of the
1.137 wiz 1073: variable (where a
1074: .Dq word
1075: is white-space delimited sequence of characters).
1.1 cgd 1076: The general format of a variable expansion is as follows:
1077: .Pp
1.120 sjg 1078: .Dl ${variable[:modifier[:...]]}
1.1 cgd 1079: .Pp
1.97 lukem 1080: Each modifier begins with a colon,
1081: which may be escaped with a backslash
1.1 cgd 1082: .Pq Ql \e .
1.120 sjg 1083: .Pp
1084: A set of modifiers can be specified via a variable, as follows:
1085: .Pp
1086: .Dl modifier_variable=modifier[:...]
1087: .Dl ${variable:${modifier_variable}[:...]}
1088: .Pp
1089: In this case the first modifier in the modifier_variable does not
1090: start with a colon, since that must appear in the referencing
1091: variable.
1092: If any of the modifiers in the modifier_variable contain a dollar sign
1093: .Pq Ql $ ,
1094: these must be doubled to avoid early expansion.
1095: .Pp
1.97 lukem 1096: The supported modifiers are:
1.61 ross 1097: .Bl -tag -width EEE
1.91 lukem 1098: .It Cm \&:E
1.1 cgd 1099: Replaces each word in the variable with its suffix.
1.91 lukem 1100: .It Cm \&:H
1.237 dholland 1101: Replaces each word in the variable with everything but the last component.
1.91 lukem 1102: .It Cm \&:M Ns Ar pattern
1.72 uebayasi 1103: Select only those words that match
1104: .Ar pattern .
1.1 cgd 1105: The standard shell wildcard characters
1106: .Pf ( Ql * ,
1.80 wiz 1107: .Ql \&? ,
1.1 cgd 1108: and
1.172 joerg 1109: .Ql Oo Oc )
1.1 cgd 1110: may
1111: be used.
1112: The wildcard characters may be escaped with a backslash
1113: .Pq Ql \e .
1.224 apb 1114: As a consequence of the way values are split into words, matched,
1115: and then joined, a construct like
1116: .Dl ${VAR:M*}
1117: will normalise the inter-word spacing, removing all leading and
1118: trailing space, and converting multiple consecutive spaces
1119: to single spaces.
1120: .
1.91 lukem 1121: .It Cm \&:N Ns Ar pattern
1.1 cgd 1122: This is identical to
1.91 lukem 1123: .Ql Cm \&:M ,
1.1 cgd 1124: but selects all words which do not match
1.72 uebayasi 1125: .Ar pattern .
1.91 lukem 1126: .It Cm \&:O
1.109 wiz 1127: Order every word in variable alphabetically.
1128: To sort words in
1129: reverse order use the
1.108 sjg 1130: .Ql Cm \&:O:[-1..1]
1131: combination of modifiers.
1132: .It Cm \&:Ox
1.109 wiz 1133: Randomize words in variable.
1134: The results will be different each time you are referring to the
1135: modified variable; use the assignment with expansion
1.108 sjg 1136: .Pq Ql Cm \&:=
1.109 wiz 1137: to prevent such behaviour.
1138: For example,
1.108 sjg 1139: .Bd -literal -offset indent
1140: LIST= uno due tre quattro
1141: RANDOM_LIST= ${LIST:Ox}
1142: STATIC_RANDOM_LIST:= ${LIST:Ox}
1143:
1144: all:
1145: @echo "${RANDOM_LIST}"
1146: @echo "${RANDOM_LIST}"
1147: @echo "${STATIC_RANDOM_LIST}"
1148: @echo "${STATIC_RANDOM_LIST}"
1149: .Ed
1.109 wiz 1150: may produce output similar to:
1.108 sjg 1151: .Bd -literal -offset indent
1152: quattro due tre uno
1153: tre due quattro uno
1154: due uno quattro tre
1155: due uno quattro tre
1156: .Ed
1.91 lukem 1157: .It Cm \&:Q
1.17 christos 1158: Quotes every shell meta-character in the variable, so that it can be passed
1159: safely through recursive invocations of
1.74 wiz 1160: .Nm .
1.91 lukem 1161: .It Cm \&:R
1.1 cgd 1162: Replaces each word in the variable with everything but its suffix.
1.187 sjg 1163: .It Cm \&:gmtime
1.188 wiz 1164: The value is a format string for
1.187 sjg 1165: .Xr strftime 3 ,
1.188 wiz 1166: using the current
1.187 sjg 1167: .Xr gmtime 3 .
1.186 joerg 1168: .It Cm \&:hash
1169: Compute a 32bit hash of the value and encode it as hex digits.
1.187 sjg 1170: .It Cm \&:localtime
1.188 wiz 1171: The value is a format string for
1.187 sjg 1172: .Xr strftime 3 ,
1.188 wiz 1173: using the current
1.187 sjg 1174: .Xr localtime 3 .
1.170 sjg 1175: .It Cm \&:tA
1176: Attempt to convert variable to an absolute path using
1177: .Xr realpath 3 ,
1178: if that fails, the value is unchanged.
1.91 lukem 1179: .It Cm \&:tl
1.60 pk 1180: Converts variable to lower-case letters.
1.91 lukem 1181: .It Cm \&:ts Ns Ar c
1.81 sjg 1182: Words in the variable are normally separated by a space on expansion.
1183: This modifier sets the separator to the character
1184: .Ar c .
1185: If
1186: .Ar c
1187: is omitted, then no separator is used.
1.170 sjg 1188: The common escapes (including octal numeric codes), work as expected.
1.91 lukem 1189: .It Cm \&:tu
1.82 wiz 1190: Converts variable to upper-case letters.
1.91 lukem 1191: .It Cm \&:tW
1.89 sjg 1192: Causes the value to be treated as a single word
1193: (possibly containing embedded white space).
1194: See also
1.91 lukem 1195: .Ql Cm \&:[*] .
1196: .It Cm \&:tw
1.89 sjg 1197: Causes the value to be treated as a sequence of
1198: words delimited by white space.
1199: See also
1.91 lukem 1200: .Ql Cm \&:[@] .
1.1 cgd 1201: .Sm off
1.164 joerg 1202: .It Cm \&:S No \&/ Ar old_string No \&/ Ar new_string No \&/ Op Cm 1gW
1.1 cgd 1203: .Sm on
1204: Modify the first occurrence of
1.17 christos 1205: .Ar old_string
1206: in the variable's value, replacing it with
1207: .Ar new_string .
1.1 cgd 1208: If a
1209: .Ql g
1210: is appended to the last slash of the pattern, all occurrences
1211: in each word are replaced.
1.17 christos 1212: If a
1213: .Ql 1
1214: is appended to the last slash of the pattern, only the first word
1215: is affected.
1.89 sjg 1216: If a
1217: .Ql W
1218: is appended to the last slash of the pattern,
1219: then the value is treated as a single word
1220: (possibly containing embedded white space).
1.1 cgd 1221: If
1.17 christos 1222: .Ar old_string
1223: begins with a caret
1.1 cgd 1224: .Pq Ql ^ ,
1.17 christos 1225: .Ar old_string
1.1 cgd 1226: is anchored at the beginning of each word.
1227: If
1.17 christos 1228: .Ar old_string
1.1 cgd 1229: ends with a dollar sign
1230: .Pq Ql \&$ ,
1231: it is anchored at the end of each word.
1232: Inside
1233: .Ar new_string ,
1234: an ampersand
1.62 ross 1235: .Pq Ql \*[Am]
1.1 cgd 1236: is replaced by
1.17 christos 1237: .Ar old_string
1238: (without any
1239: .Ql ^
1240: or
1241: .Ql \&$ ) .
1.1 cgd 1242: Any character may be used as a delimiter for the parts of the modifier
1243: string.
1244: The anchoring, ampersand and delimiter characters may be escaped with a
1245: backslash
1246: .Pq Ql \e .
1247: .Pp
1248: Variable expansion occurs in the normal fashion inside both
1249: .Ar old_string
1250: and
1251: .Ar new_string
1252: with the single exception that a backslash is used to prevent the expansion
1253: of a dollar sign
1.17 christos 1254: .Pq Ql \&$ ,
1.1 cgd 1255: not a preceding dollar sign as is usual.
1.17 christos 1256: .Sm off
1.164 joerg 1257: .It Cm \&:C No \&/ Ar pattern No \&/ Ar replacement No \&/ Op Cm 1gW
1.17 christos 1258: .Sm on
1259: The
1.91 lukem 1260: .Cm \&:C
1.17 christos 1261: modifier is just like the
1.91 lukem 1262: .Cm \&:S
1.37 msaitoh 1263: modifier except that the old and new strings, instead of being
1.223 apb 1264: simple strings, are an extended regular expression (see
1.17 christos 1265: .Xr regex 3 )
1.72 uebayasi 1266: string
1267: .Ar pattern
1.17 christos 1268: and an
1269: .Xr ed 1 Ns \-style
1.72 uebayasi 1270: string
1271: .Ar replacement .
1272: Normally, the first occurrence of the pattern
1273: .Ar pattern
1274: in each word of the value is substituted with
1275: .Ar replacement .
1.67 grant 1276: The
1.17 christos 1277: .Ql 1
1278: modifier causes the substitution to apply to at most one word; the
1279: .Ql g
1280: modifier causes the substitution to apply to as many instances of the
1.72 uebayasi 1281: search pattern
1282: .Ar pattern
1.89 sjg 1283: as occur in the word or words it is found in; the
1284: .Ql W
1285: modifier causes the value to be treated as a single word
1286: (possibly containing embedded white space).
1.67 grant 1287: Note that
1.17 christos 1288: .Ql 1
1289: and
1290: .Ql g
1291: are orthogonal; the former specifies whether multiple words are
1292: potentially affected, the latter whether multiple substitutions can
1293: potentially occur within each affected word.
1.229 apb 1294: .Pp
1295: As for the
1296: .Cm \&:S
1297: modifier, the
1298: .Ar pattern
1299: and
1300: .Ar replacement
1301: are subjected to variable expansion before being parsed as
1302: regular expressions.
1.91 lukem 1303: .It Cm \&:T
1.237 dholland 1304: Replaces each word in the variable with its last component.
1.91 lukem 1305: .It Cm \&:u
1.43 christos 1306: Remove adjacent duplicate words (like
1.57 wiz 1307: .Xr uniq 1 ) .
1.91 lukem 1308: .Sm off
1309: .It Cm \&:\&? Ar true_string Cm \&: Ar false_string
1310: .Sm on
1.152 dsl 1311: If the variable name (not its value), when parsed as a .if conditional
1312: expression, evaluates to true, return as its value the
1.57 wiz 1313: .Ar true_string ,
1.27 christos 1314: otherwise return the
1.57 wiz 1315: .Ar false_string .
1.152 dsl 1316: Since the variable name is used as the expression, \&:\&? must be the
1317: first modifier after the variable name itself - which will, of course,
1318: usually contain variable expansions.
1.162 dsl 1319: A common error is trying to use expressions like
1320: .Dl ${NUMBERS:M42:?match:no}
1321: which actually tests defined(NUMBERS),
1322: to determine is any words match "42" you need to use something like:
1.183 sjg 1323: .Dl ${"${NUMBERS:M42}" != \&"\&":?match:no} .
1.91 lukem 1324: .It Ar :old_string=new_string
1.1 cgd 1325: This is the
1326: .At V
1.237 dholland 1327: style variable substitution.
1.1 cgd 1328: It must be the last modifier specified.
1.16 christos 1329: If
1.6 cgd 1330: .Ar old_string
1331: or
1332: .Ar new_string
1333: do not contain the pattern matching character
1334: .Ar %
1.16 christos 1335: then it is assumed that they are
1.6 cgd 1336: anchored at the end of each word, so only suffixes or entire
1.67 grant 1337: words may be replaced.
1338: Otherwise
1.6 cgd 1339: .Ar %
1.16 christos 1340: is the substring of
1341: .Ar old_string
1.6 cgd 1342: to be replaced in
1.64 wiz 1343: .Ar new_string .
1.95 jmc 1344: .Pp
1345: Variable expansion occurs in the normal fashion inside both
1346: .Ar old_string
1347: and
1348: .Ar new_string
1.96 wiz 1349: with the single exception that a backslash is used to prevent the
1350: expansion of a dollar sign
1351: .Pq Ql \&$ ,
1352: not a preceding dollar sign as is usual.
1.91 lukem 1353: .Sm off
1.164 joerg 1354: .It Cm \&:@ Ar temp Cm @ Ar string Cm @
1.91 lukem 1355: .Sm on
1.40 sjg 1356: This is the loop expansion mechanism from the OSF Development
1.67 grant 1357: Environment (ODE) make.
1358: Unlike
1.48 wiz 1359: .Cm \&.for
1.40 sjg 1360: loops expansion occurs at the time of
1.67 grant 1361: reference.
1362: Assign
1.40 sjg 1363: .Ar temp
1364: to each word in the variable and evaluate
1365: .Ar string .
1.48 wiz 1366: The ODE convention is that
1.40 sjg 1367: .Ar temp
1.67 grant 1368: should start and end with a period.
1369: For example.
1.40 sjg 1370: .Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
1.198 sjg 1371: .Pp
1.218 agc 1372: However a single character variable is often more readable:
1.198 sjg 1373: .Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
1.91 lukem 1374: .It Cm \&:U Ns Ar newval
1.40 sjg 1375: If the variable is undefined
1376: .Ar newval
1.63 lukem 1377: is the value.
1378: If the variable is defined, the existing value is returned.
1.67 grant 1379: This is another ODE make feature.
1380: It is handy for setting per-target CFLAGS for instance:
1.40 sjg 1381: .Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
1.63 lukem 1382: If a value is only required if the variable is undefined, use:
1383: .Dl ${VAR:D:Unewval}
1.91 lukem 1384: .It Cm \&:D Ns Ar newval
1.40 sjg 1385: If the variable is defined
1386: .Ar newval
1387: is the value.
1.91 lukem 1388: .It Cm \&:L
1.40 sjg 1389: The name of the variable is the value.
1.91 lukem 1390: .It Cm \&:P
1.40 sjg 1391: The path of the node which has the same name as the variable
1.67 grant 1392: is the value.
1393: If no such node exists or its path is null, then the
1.40 sjg 1394: name of the variable is used.
1.217 wiz 1395: In order for this modifier to work, the name (node) must at least have
1.199 sjg 1396: appeared on the rhs of a dependency.
1.91 lukem 1397: .Sm off
1398: .It Cm \&:\&! Ar cmd Cm \&!
1399: .Sm on
1.40 sjg 1400: The output of running
1401: .Ar cmd
1402: is the value.
1.91 lukem 1403: .It Cm \&:sh
1.40 sjg 1404: If the variable is non-empty it is run as a command and the output
1405: becomes the new value.
1.91 lukem 1406: .It Cm \&::= Ns Ar str
1.48 wiz 1407: The variable is assigned the value
1.41 sjg 1408: .Ar str
1.67 grant 1409: after substitution.
1410: This modifier and its variations are useful in
1.149 dsl 1411: obscure situations such as wanting to set a variable when shell commands
1412: are being parsed.
1.67 grant 1413: These assignment modifiers always expand to
1.41 sjg 1414: nothing, so if appearing in a rule line by themselves should be
1.48 wiz 1415: preceded with something to keep
1.41 sjg 1416: .Nm
1.67 grant 1417: happy.
1.149 dsl 1418: .Pp
1.91 lukem 1419: The
1420: .Ql Cm \&::
1.42 sjg 1421: helps avoid false matches with the
1422: .At V
1.48 wiz 1423: style
1.91 lukem 1424: .Cm \&:=
1.48 wiz 1425: modifier and since substitution always occurs the
1.91 lukem 1426: .Cm \&::=
1.42 sjg 1427: form is vaguely appropriate.
1.91 lukem 1428: .It Cm \&::?= Ns Ar str
1.41 sjg 1429: As for
1.91 lukem 1430: .Cm \&::=
1.41 sjg 1431: but only if the variable does not already have a value.
1.91 lukem 1432: .It Cm \&::+= Ns Ar str
1.48 wiz 1433: Append
1.41 sjg 1434: .Ar str
1435: to the variable.
1.91 lukem 1436: .It Cm \&::!= Ns Ar cmd
1.48 wiz 1437: Assign the output of
1.41 sjg 1438: .Ar cmd
1439: to the variable.
1.91 lukem 1440: .It Cm \&:\&[ Ns Ar range Ns Cm \&]
1.89 sjg 1441: Selects one or more words from the value,
1442: or performs other operations related to the way in which the
1443: value is divided into words.
1444: .Pp
1445: Ordinarily, a value is treated as a sequence of words
1446: delimited by white space.
1447: Some modifiers suppress this behaviour,
1448: causing a value to be treated as a single word
1449: (possibly containing embedded white space).
1450: An empty value, or a value that consists entirely of white-space,
1451: is treated as a single word.
1452: For the purposes of the
1.91 lukem 1453: .Ql Cm \&:[]
1.89 sjg 1454: modifier, the words are indexed both forwards using positive integers
1455: (where index 1 represents the first word),
1456: and backwards using negative integers
1.194 sjg 1457: (where index \-1 represents the last word).
1.89 sjg 1458: .Pp
1459: The
1460: .Ar range
1461: is subjected to variable expansion, and the expanded result is
1462: then interpreted as follows:
1463: .Bl -tag -width index
1.90 jdolecek 1464: .\" :[n]
1.89 sjg 1465: .It Ar index
1466: Selects a single word from the value.
1.90 jdolecek 1467: .\" :[start..end]
1.89 sjg 1468: .It Ar start Ns Cm \&.. Ns Ar end
1469: Selects all words from
1470: .Ar start
1471: to
1472: .Ar end ,
1473: inclusive.
1474: For example,
1.91 lukem 1475: .Ql Cm \&:[2..-1]
1.89 sjg 1476: selects all words from the second word to the last word.
1477: If
1478: .Ar start
1479: is greater than
1480: .Ar end ,
1.91 lukem 1481: then the words are output in reverse order.
1482: For example,
1483: .Ql Cm \&:[-1..1]
1.89 sjg 1484: selects all the words from last to first.
1.90 jdolecek 1485: .\" :[*]
1.89 sjg 1486: .It Cm \&*
1487: Causes subsequent modifiers to treat the value as a single word
1.109 wiz 1488: (possibly containing embedded white space).
1489: Analogous to the effect of
1.94 wiz 1490: \&"$*\&"
1.89 sjg 1491: in Bourne shell.
1.90 jdolecek 1492: .\" :[0]
1.89 sjg 1493: .It 0
1494: Means the same as
1.91 lukem 1495: .Ql Cm \&:[*] .
1.90 jdolecek 1496: .\" :[*]
1.89 sjg 1497: .It Cm \&@
1498: Causes subsequent modifiers to treat the value as a sequence of words
1.109 wiz 1499: delimited by white space.
1500: Analogous to the effect of
1.94 wiz 1501: \&"$@\&"
1.89 sjg 1502: in Bourne shell.
1.90 jdolecek 1503: .\" :[#]
1.89 sjg 1504: .It Cm \&#
1505: Returns the number of words in the value.
1506: .El \" :[range]
1.6 cgd 1507: .El
1508: .Sh INCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS
1.16 christos 1509: Makefile inclusion, conditional structures and for loops reminiscent
1.6 cgd 1510: of the C programming language are provided in
1.74 wiz 1511: .Nm .
1.1 cgd 1512: All such structures are identified by a line beginning with a single
1513: dot
1514: .Pq Ql \&.
1515: character.
1516: Files are included with either
1.29 ross 1517: .Cm \&.include Aq Ar file
1.1 cgd 1518: or
1.29 ross 1519: .Cm \&.include Pf \*q Ar file Ns \*q .
1.1 cgd 1520: Variables between the angle brackets or double quotes are expanded
1521: to form the file name.
1522: If angle brackets are used, the included makefile is expected to be in
1523: the system makefile directory.
1524: If double quotes are used, the including makefile's directory and any
1525: directories specified using the
1526: .Fl I
1527: option are searched before the system
1528: makefile directory.
1.28 christos 1529: For compatibility with other versions of
1530: .Nm
1531: .Ql include file ...
1.67 grant 1532: is also accepted.
1.250 sjg 1533: .Pp
1.67 grant 1534: If the include statement is written as
1.29 ross 1535: .Cm .-include
1536: or as
1537: .Cm .sinclude
1.28 christos 1538: then errors locating and/or opening include files are ignored.
1.1 cgd 1539: .Pp
1.250 sjg 1540: If the include statement is written as
1541: .Cm .dinclude
1542: not only are errors locating and/or opening include files ignored,
1543: but stale dependencies within the included file will be ignored
1544: just like
1545: .Va .MAKE.DEPENDFILE .
1546: .Pp
1.1 cgd 1547: Conditional expressions are also preceded by a single dot as the first
1.5 jtc 1548: character of a line.
1.1 cgd 1549: The possible conditionals are as follows:
1550: .Bl -tag -width Ds
1.168 sjg 1551: .It Ic .error Ar message
1552: The message is printed along with the name of the makefile and line number,
1553: then
1554: .Nm
1555: will exit.
1.165 sjg 1556: .It Ic .export Ar variable ...
1.133 sjg 1557: Export the specified global variable.
1.165 sjg 1558: If no variable list is provided, all globals are exported
1.133 sjg 1559: except for internal variables (those that start with
1.157 wiz 1560: .Ql \&. ) .
1.133 sjg 1561: This is not affected by the
1562: .Fl X
1563: flag, so should be used with caution.
1.201 christos 1564: For compatibility with other
1565: .Nm
1566: programs
1567: .Ql export variable=value
1568: is also accepted.
1.165 sjg 1569: .Pp
1.133 sjg 1570: Appending a variable name to
1571: .Va .MAKE.EXPORTED
1572: is equivalent to exporting a variable.
1.173 sjg 1573: .It Ic .export-env Ar variable ...
1.176 wiz 1574: The same as
1.173 sjg 1575: .Ql .export ,
1.176 wiz 1576: except that the variable is not appended to
1.173 sjg 1577: .Va .MAKE.EXPORTED .
1.176 wiz 1578: This allows exporting a value to the environment which is different from that
1579: used by
1.173 sjg 1580: .Nm
1581: internally.
1.252 ! sjg 1582: .It Ic .export-literal Ar variable ...
! 1583: The same as
! 1584: .Ql .export-env ,
! 1585: except that variables in the value are not expanded.
1.168 sjg 1586: .It Ic .info Ar message
1587: The message is printed along with the name of the makefile and line number.
1.169 wiz 1588: .It Ic .undef Ar variable
1589: Un-define the specified global variable.
1590: Only global variables may be un-defined.
1.165 sjg 1591: .It Ic .unexport Ar variable ...
1592: The opposite of
1593: .Ql .export .
1594: The specified global
1.166 wiz 1595: .Va variable
1596: will be removed from
1.165 sjg 1597: .Va .MAKE.EXPORTED .
1598: If no variable list is provided, all globals are unexported,
1599: and
1.166 wiz 1600: .Va .MAKE.EXPORTED
1.165 sjg 1601: deleted.
1602: .It Ic .unexport-env
1603: Unexport all globals previously exported and
1604: clear the environment inherited from the parent.
1.166 wiz 1605: This operation will cause a memory leak of the original environment,
1606: so should be used sparingly.
1607: Testing for
1.165 sjg 1608: .Va .MAKE.LEVEL
1609: being 0, would make sense.
1.166 wiz 1610: Also note that any variables which originated in the parent environment
1.165 sjg 1611: should be explicitly preserved if desired.
1612: For example:
1613: .Bd -literal -offset indent
1614: .Li .if ${.MAKE.LEVEL} == 0
1615: PATH := ${PATH}
1616: .Li .unexport-env
1617: .Li .export PATH
1618: .Li .endif
1619: .Pp
1620: .Ed
1.166 wiz 1621: Would result in an environment containing only
1.165 sjg 1622: .Ql Ev PATH ,
1623: which is the minimal useful environment.
1624: Actually
1.166 wiz 1625: .Ql Ev .MAKE.LEVEL
1.165 sjg 1626: will also be pushed into the new environment.
1.168 sjg 1627: .It Ic .warning Ar message
1628: The message prefixed by
1629: .Ql Pa warning:
1630: is printed along with the name of the makefile and line number.
1.164 joerg 1631: .It Ic \&.if Oo \&! Oc Ns Ar expression Op Ar operator expression ...
1.1 cgd 1632: Test the value of an expression.
1.164 joerg 1633: .It Ic .ifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ...
1.7 mycroft 1634: Test the value of a variable.
1.164 joerg 1635: .It Ic .ifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ...
1.7 mycroft 1636: Test the value of a variable.
1.164 joerg 1637: .It Ic .ifmake Oo \&! Oc Ns Ar target Op Ar operator target ...
1.7 mycroft 1638: Test the target being built.
1.164 joerg 1639: .It Ic .ifnmake Oo \&! Ns Oc Ar target Op Ar operator target ...
1.1 cgd 1640: Test the target being built.
1641: .It Ic .else
1642: Reverse the sense of the last conditional.
1.164 joerg 1643: .It Ic .elif Oo \&! Ns Oc Ar expression Op Ar operator expression ...
1.1 cgd 1644: A combination of
1645: .Ql Ic .else
1646: followed by
1647: .Ql Ic .if .
1.164 joerg 1648: .It Ic .elifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ...
1.1 cgd 1649: A combination of
1650: .Ql Ic .else
1651: followed by
1652: .Ql Ic .ifdef .
1.164 joerg 1653: .It Ic .elifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ...
1.1 cgd 1654: A combination of
1655: .Ql Ic .else
1656: followed by
1657: .Ql Ic .ifndef .
1.164 joerg 1658: .It Ic .elifmake Oo \&! Oc Ns Ar target Op Ar operator target ...
1.1 cgd 1659: A combination of
1660: .Ql Ic .else
1661: followed by
1662: .Ql Ic .ifmake .
1.164 joerg 1663: .It Ic .elifnmake Oo \&! Oc Ns Ar target Op Ar operator target ...
1.1 cgd 1664: A combination of
1665: .Ql Ic .else
1666: followed by
1667: .Ql Ic .ifnmake .
1668: .It Ic .endif
1669: End the body of the conditional.
1670: .El
1671: .Pp
1672: The
1673: .Ar operator
1674: may be any one of the following:
1675: .Bl -tag -width "Cm XX"
1676: .It Cm \&|\&|
1.64 wiz 1677: Logical OR.
1.62 ross 1678: .It Cm \&\*[Am]\*[Am]
1.1 cgd 1679: Logical
1680: .Tn AND ;
1681: of higher precedence than
1.26 hubertf 1682: .Dq \&|\&| .
1.1 cgd 1683: .El
1684: .Pp
1685: As in C,
1.25 lukem 1686: .Nm
1.1 cgd 1687: will only evaluate a conditional as far as is necessary to determine
1688: its value.
1.16 christos 1689: Parentheses may be used to change the order of evaluation.
1.1 cgd 1690: The boolean operator
1691: .Ql Ic \&!
1692: may be used to logically negate an entire
1693: conditional.
1.5 jtc 1694: It is of higher precedence than
1.62 ross 1695: .Ql Ic \&\*[Am]\*[Am] .
1.1 cgd 1696: .Pp
1697: The value of
1698: .Ar expression
1699: may be any of the following:
1.61 ross 1700: .Bl -tag -width defined
1.1 cgd 1701: .It Ic defined
1702: Takes a variable name as an argument and evaluates to true if the variable
1703: has been defined.
1704: .It Ic make
1705: Takes a target name as an argument and evaluates to true if the target
1706: was specified as part of
1.74 wiz 1707: .Nm Ns 's
1.1 cgd 1708: command line or was declared the default target (either implicitly or
1709: explicitly, see
1710: .Va .MAIN )
1711: before the line containing the conditional.
1712: .It Ic empty
1.5 jtc 1713: Takes a variable, with possible modifiers, and evaluates to true if
1.1 cgd 1714: the expansion of the variable would result in an empty string.
1715: .It Ic exists
1716: Takes a file name as an argument and evaluates to true if the file exists.
1717: The file is searched for on the system search path (see
1718: .Va .PATH ) .
1719: .It Ic target
1720: Takes a target name as an argument and evaluates to true if the target
1721: has been defined.
1.47 christos 1722: .It Ic commands
1723: Takes a target name as an argument and evaluates to true if the target
1724: has been defined and has commands associated with it.
1.1 cgd 1725: .El
1726: .Pp
1727: .Ar Expression
1.67 grant 1728: may also be an arithmetic or string comparison.
1729: Variable expansion is
1.6 cgd 1730: performed on both sides of the comparison, after which the integral
1.67 grant 1731: values are compared.
1732: A value is interpreted as hexadecimal if it is
1.6 cgd 1733: preceded by 0x, otherwise it is decimal; octal numbers are not supported.
1.67 grant 1734: The standard C relational operators are all supported.
1735: If after
1.6 cgd 1736: variable expansion, either the left or right hand side of a
1.1 cgd 1737: .Ql Ic ==
1738: or
1739: .Ql Ic "!="
1.6 cgd 1740: operator is not an integral value, then
1741: string comparison is performed between the expanded
1742: variables.
1.1 cgd 1743: If no relational operator is given, it is assumed that the expanded
1.102 sjg 1744: variable is being compared against 0 or an empty string in the case
1745: of a string comparison.
1.1 cgd 1746: .Pp
1747: When
1.25 lukem 1748: .Nm
1.150 dsl 1749: is evaluating one of these conditional expressions, and it encounters
1750: a (white-space separated) word it doesn't recognize, either the
1.137 wiz 1751: .Dq make
1752: or
1753: .Dq defined
1.1 cgd 1754: expression is applied to it, depending on the form of the conditional.
1755: If the form is
1.150 dsl 1756: .Ql Ic .ifdef ,
1757: .Ql Ic .ifndef ,
1.1 cgd 1758: or
1.150 dsl 1759: .Ql Ic .if
1.137 wiz 1760: the
1761: .Dq defined
1762: expression is applied.
1.1 cgd 1763: Similarly, if the form is
1764: .Ql Ic .ifmake
1765: or
1.237 dholland 1766: .Ql Ic .ifnmake , the
1.137 wiz 1767: .Dq make
1.1 cgd 1768: expression is applied.
1769: .Pp
1770: If the conditional evaluates to true the parsing of the makefile continues
1771: as before.
1772: If it evaluates to false, the following lines are skipped.
1773: In both cases this continues until a
1774: .Ql Ic .else
1775: or
1776: .Ql Ic .endif
1777: is found.
1.16 christos 1778: .Pp
1.6 cgd 1779: For loops are typically used to apply a set of rules to a list of files.
1780: The syntax of a for loop is:
1.59 bgrayson 1781: .Pp
1782: .Bl -tag -compact -width Ds
1.164 joerg 1783: .It Ic \&.for Ar variable Oo Ar variable ... Oc Ic in Ar expression
1.80 wiz 1784: .It Aq make-rules
1785: .It Ic \&.endfor
1.6 cgd 1786: .El
1.59 bgrayson 1787: .Pp
1.6 cgd 1788: After the for
1.16 christos 1789: .Ic expression
1.67 grant 1790: is evaluated, it is split into words.
1791: On each iteration of the loop, one word is taken and assigned to each
1.39 christos 1792: .Ic variable ,
1793: in order, and these
1794: .Ic variables
1795: are substituted into the
1.16 christos 1796: .Ic make-rules
1.6 cgd 1797: inside the body of the for loop.
1.39 christos 1798: The number of words must come out even; that is, if there are three
1799: iteration variables, the number of words provided must be a multiple
1800: of three.
1.1 cgd 1801: .Sh COMMENTS
1802: Comments begin with a hash
1803: .Pq Ql \&#
1804: character, anywhere but in a shell
1.237 dholland 1805: command line, and continue to the end of an unescaped new line.
1.97 lukem 1806: .Sh SPECIAL SOURCES (ATTRIBUTES)
1.61 ross 1807: .Bl -tag -width .IGNOREx
1.97 lukem 1808: .It Ic .EXEC
1809: Target is never out of date, but always execute commands anyway.
1.1 cgd 1810: .It Ic .IGNORE
1811: Ignore any errors from the commands associated with this target, exactly
1812: as if they all were preceded by a dash
1813: .Pq Ql \- .
1.237 dholland 1814: .\" .It Ic .INVISIBLE
1815: .\" XXX
1816: .\" .It Ic .JOIN
1817: .\" XXX
1.18 christos 1818: .It Ic .MADE
1.48 wiz 1819: Mark all sources of this target as being up-to-date.
1.1 cgd 1820: .It Ic .MAKE
1821: Execute the commands associated with this target even if the
1822: .Fl n
1823: or
1824: .Fl t
1825: options were specified.
1826: Normally used to mark recursive
1.226 dholland 1827: .Nm Ns s .
1.180 sjg 1828: .It Ic .META
1829: Create a meta file for the target, even if it is flagged as
1830: .Ic .PHONY ,
1.182 wiz 1831: .Ic .MAKE ,
1.180 sjg 1832: or
1833: .Ic .SPECIAL .
1834: Usage in conjunction with
1835: .Ic .MAKE
1836: is the most likely case.
1.194 sjg 1837: In "meta" mode, the target is out-of-date if the meta file is missing.
1.180 sjg 1838: .It Ic .NOMETA
1839: Do not create a meta file for the target.
1840: Meta files are also not created for
1841: .Ic .PHONY ,
1.182 wiz 1842: .Ic .MAKE ,
1.180 sjg 1843: or
1844: .Ic .SPECIAL
1845: targets.
1846: .It Ic .NOMETA_CMP
1847: Ignore differences in commands when deciding if target is out of date.
1848: This is useful if the command contains a value which always changes.
1.182 wiz 1849: If the number of commands change, though, the target will still be out of date.
1.213 sjg 1850: The same effect applies to any command line that uses the variable
1851: .Va .OODATE ,
1852: which can be used for that purpose even when not otherwise needed or desired:
1853: .Bd -literal -offset indent
1854:
1855: skip-compare-for-some:
1856: @echo this will be compared
1857: @echo this will not ${.OODATE:M.NOMETA_CMP}
1858: @echo this will also be compared
1859:
1860: .Ed
1861: The
1862: .Cm \&:M
1863: pattern suppresses any expansion of the unwanted variable.
1.97 lukem 1864: .It Ic .NOPATH
1865: Do not search for the target in the directories specified by
1866: .Ic .PATH .
1.1 cgd 1867: .It Ic .NOTMAIN
1868: Normally
1.25 lukem 1869: .Nm
1.1 cgd 1870: selects the first target it encounters as the default target to be built
1871: if no target was specified.
1872: This source prevents this target from being selected.
1873: .It Ic .OPTIONAL
1874: If a target is marked with this attribute and
1.25 lukem 1875: .Nm
1.1 cgd 1876: can't figure out how to create it, it will ignore this fact and assume
1877: the file isn't needed or already exists.
1.97 lukem 1878: .It Ic .PHONY
1879: The target does not
1880: correspond to an actual file; it is always considered to be out of date,
1881: and will not be created with the
1882: .Fl t
1883: option.
1.179 dholland 1884: Suffix-transformation rules are not applied to
1885: .Ic .PHONY
1886: targets.
1.1 cgd 1887: .It Ic .PRECIOUS
1888: When
1.25 lukem 1889: .Nm
1.131 rillig 1890: is interrupted, it normally removes any partially made targets.
1.1 cgd 1891: This source prevents the target from being removed.
1.97 lukem 1892: .It Ic .RECURSIVE
1893: Synonym for
1894: .Ic .MAKE .
1.1 cgd 1895: .It Ic .SILENT
1896: Do not echo any of the commands associated with this target, exactly
1897: as if they all were preceded by an at sign
1898: .Pq Ql @ .
1899: .It Ic .USE
1900: Turn the target into
1.74 wiz 1901: .Nm Ns 's
1.1 cgd 1902: version of a macro.
1903: When the target is used as a source for another target, the other target
1904: acquires the commands, sources, and attributes (except for
1905: .Ic .USE )
1906: of the
1907: source.
1908: If the target already has commands, the
1909: .Ic .USE
1910: target's commands are appended
1911: to them.
1.52 christos 1912: .It Ic .USEBEFORE
1913: Exactly like
1914: .Ic .USE ,
1.57 wiz 1915: but prepend the
1.52 christos 1916: .Ic .USEBEFORE
1917: target commands to the target.
1.12 christos 1918: .It Ic .WAIT
1.71 mjl 1919: If
1.12 christos 1920: .Ic .WAIT
1.71 mjl 1921: appears in a dependency line, the sources that precede it are
1.67 grant 1922: made before the sources that succeed it in the line.
1.128 dsl 1923: Since the dependents of files are not made until the file itself
1924: could be made, this also stops the dependents being built unless they
1925: are needed for another branch of the dependency tree.
1926: So given:
1927: .Bd -literal
1928: x: a .WAIT b
1929: echo x
1930: a:
1931: echo a
1932: b: b1
1933: echo b
1934: b1:
1935: echo b1
1936:
1937: .Ed
1938: the output is always
1.151 dholland 1939: .Ql a ,
1.128 dsl 1940: .Ql b1 ,
1941: .Ql b ,
1942: .Ql x .
1943: .br
1.122 apb 1944: The ordering imposed by
1945: .Ic .WAIT
1.128 dsl 1946: is only relevant for parallel makes.
1.1 cgd 1947: .El
1.57 wiz 1948: .Sh SPECIAL TARGETS
1.1 cgd 1949: Special targets may not be included with other targets, i.e. they must be
1950: the only target specified.
1.61 ross 1951: .Bl -tag -width .BEGINx
1.1 cgd 1952: .It Ic .BEGIN
1953: Any command lines attached to this target are executed before anything
1954: else is done.
1955: .It Ic .DEFAULT
1956: This is sort of a
1957: .Ic .USE
1958: rule for any target (that was used only as a
1959: source) that
1.25 lukem 1960: .Nm
1.1 cgd 1961: can't figure out any other way to create.
1962: Only the shell script is used.
1963: The
1964: .Ic .IMPSRC
1965: variable of a target that inherits
1966: .Ic .DEFAULT Ns 's
1967: commands is set
1968: to the target's own name.
1969: .It Ic .END
1970: Any command lines attached to this target are executed after everything
1971: else is done.
1.168 sjg 1972: .It Ic .ERROR
1973: Any command lines attached to this target are executed when another target fails.
1974: The
1975: .Ic .ERROR_TARGET
1976: variable is set to the target that failed.
1.169 wiz 1977: See also
1.168 sjg 1978: .Ic MAKE_PRINT_VAR_ON_ERROR .
1.1 cgd 1979: .It Ic .IGNORE
1980: Mark each of the sources with the
1981: .Ic .IGNORE
1982: attribute.
1983: If no sources are specified, this is the equivalent of specifying the
1984: .Fl i
1985: option.
1986: .It Ic .INTERRUPT
1987: If
1.25 lukem 1988: .Nm
1.1 cgd 1989: is interrupted, the commands for this target will be executed.
1990: .It Ic .MAIN
1991: If no target is specified when
1.25 lukem 1992: .Nm
1.1 cgd 1993: is invoked, this target will be built.
1994: .It Ic .MAKEFLAGS
1995: This target provides a way to specify flags for
1.25 lukem 1996: .Nm
1.1 cgd 1997: when the makefile is used.
1998: The flags are as if typed to the shell, though the
1999: .Fl f
2000: option will have
2001: no effect.
1.12 christos 2002: .\" XXX: NOT YET!!!!
2003: .\" .It Ic .NOTPARALLEL
1.70 wiz 2004: .\" The named targets are executed in non parallel mode.
2005: .\" If no targets are
1.12 christos 2006: .\" specified, then all targets are executed in non parallel mode.
1.20 gwr 2007: .It Ic .NOPATH
2008: Apply the
2009: .Ic .NOPATH
1.67 grant 2010: attribute to any specified sources.
1.12 christos 2011: .It Ic .NOTPARALLEL
2012: Disable parallel mode.
2013: .It Ic .NO_PARALLEL
1.97 lukem 2014: Synonym for
2015: .Ic .NOTPARALLEL ,
2016: for compatibility with other pmake variants.
1.248 sjg 2017: .It Ic .OBJDIR
2018: The source is a new value for
2019: .Ql Va .OBJDIR .
2020: If it exists,
2021: .Nm
2022: will
2023: .Xr chdir 2
1.249 wiz 2024: to it and update the value of
1.248 sjg 2025: .Ql Va .OBJDIR .
1.12 christos 2026: .It Ic .ORDER
2027: The named targets are made in sequence.
1.128 dsl 2028: This ordering does not add targets to the list of targets to be made.
2029: Since the dependents of a target do not get built until the target itself
2030: could be built, unless
2031: .Ql a
1.129 wiz 2032: is built by another part of the dependency graph,
1.128 dsl 2033: the following is a dependency loop:
2034: .Bd -literal
1.192 cheusov 2035: \&.ORDER: b a
1.128 dsl 2036: b: a
2037: .Ed
1.129 wiz 2038: .Pp
1.122 apb 2039: The ordering imposed by
2040: .Ic .ORDER
1.128 dsl 2041: is only relevant for parallel makes.
1.12 christos 2042: .\" XXX: NOT YET!!!!
2043: .\" .It Ic .PARALLEL
1.70 wiz 2044: .\" The named targets are executed in parallel mode.
2045: .\" If no targets are
1.12 christos 2046: .\" specified, then all targets are executed in parallel mode.
1.1 cgd 2047: .It Ic .PATH
2048: The sources are directories which are to be searched for files not
2049: found in the current directory.
2050: If no sources are specified, any previously specified directories are
2051: deleted.
1.34 thorpej 2052: If the source is the special
2053: .Ic .DOTLAST
2054: target, then the current working
1.33 thorpej 2055: directory is searched last.
1.222 apb 2056: .It Ic .PATH. Ns Va suffix
1.221 dholland 2057: Like
2058: .Ic .PATH
2059: but applies only to files with a particular suffix.
2060: The suffix must have been previously declared with
2061: .Ic .SUFFIXES .
1.14 christos 2062: .It Ic .PHONY
2063: Apply the
2064: .Ic .PHONY
1.67 grant 2065: attribute to any specified sources.
1.1 cgd 2066: .It Ic .PRECIOUS
2067: Apply the
2068: .Ic .PRECIOUS
2069: attribute to any specified sources.
2070: If no sources are specified, the
2071: .Ic .PRECIOUS
2072: attribute is applied to every
2073: target in the file.
1.83 sjg 2074: .It Ic .SHELL
1.86 wiz 2075: Sets the shell that
1.83 sjg 2076: .Nm
1.86 wiz 2077: will use to execute commands.
2078: The sources are a set of
1.83 sjg 2079: .Ar field=value
1.86 wiz 2080: pairs.
1.83 sjg 2081: .Bl -tag -width hasErrCtls
2082: .It Ar name
2083: This is the minimal specification, used to select one of the builtin
2084: shell specs;
2085: .Ar sh ,
2086: .Ar ksh ,
2087: and
2088: .Ar csh .
2089: .It Ar path
2090: Specifies the path to the shell.
2091: .It Ar hasErrCtl
2092: Indicates whether the shell supports exit on error.
2093: .It Ar check
2094: The command to turn on error checking.
2095: .It Ar ignore
2096: The command to disable error checking.
2097: .It Ar echo
2098: The command to turn on echoing of commands executed.
2099: .It Ar quiet
2100: The command to turn off echoing of commands executed.
2101: .It Ar filter
2102: The output to filter after issuing the
2103: .Ar quiet
1.86 wiz 2104: command.
2105: It is typically identical to
1.83 sjg 2106: .Ar quiet .
2107: .It Ar errFlag
2108: The flag to pass the shell to enable error checking.
2109: .It Ar echoFlag
2110: The flag to pass the shell to enable command echoing.
1.127 rillig 2111: .It Ar newline
2112: The string literal to pass the shell that results in a single newline
2113: character when used outside of any quoting characters.
1.83 sjg 2114: .El
2115: Example:
2116: .Bd -literal
1.167 joerg 2117: \&.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \e
1.194 sjg 2118: check="set \-e" ignore="set +e" \e
2119: echo="set \-v" quiet="set +v" filter="set +v" \e
1.167 joerg 2120: echoFlag=v errFlag=e newline="'\en'"
1.83 sjg 2121: .Ed
1.1 cgd 2122: .It Ic .SILENT
2123: Apply the
2124: .Ic .SILENT
2125: attribute to any specified sources.
2126: If no sources are specified, the
2127: .Ic .SILENT
2128: attribute is applied to every
2129: command in the file.
1.211 christos 2130: .It Ic .STALE
2131: This target gets run when a dependency file contains stale entries, having
2132: .Va .ALLSRC
2133: set to the name of that dependency file.
1.1 cgd 2134: .It Ic .SUFFIXES
1.237 dholland 2135: Each source specifies a suffix to
1.233 christos 2136: .Nm .
1.237 dholland 2137: If no sources are specified, any previously specified suffixes are deleted.
2138: It allows the creation of suffix-transformation rules.
1.136 cube 2139: .Pp
2140: Example:
2141: .Bd -literal
1.237 dholland 2142: \&.SUFFIXES: .o
2143: \&.c.o:
1.194 sjg 2144: cc \-o ${.TARGET} \-c ${.IMPSRC}
1.136 cube 2145: .Ed
1.31 ross 2146: .El
1.1 cgd 2147: .Sh ENVIRONMENT
1.25 lukem 2148: .Nm
1.73 perry 2149: uses the following environment variables, if they exist:
1.16 christos 2150: .Ev MACHINE ,
1.26 hubertf 2151: .Ev MACHINE_ARCH ,
1.1 cgd 2152: .Ev MAKE ,
1.16 christos 2153: .Ev MAKEFLAGS ,
2154: .Ev MAKEOBJDIR ,
1.38 sjg 2155: .Ev MAKEOBJDIRPREFIX ,
1.76 jrf 2156: .Ev MAKESYSPATH ,
1.154 apb 2157: .Ev PWD ,
1.1 cgd 2158: and
1.154 apb 2159: .Ev TMPDIR .
1.57 wiz 2160: .Pp
1.38 sjg 2161: .Ev MAKEOBJDIRPREFIX
1.117 lukem 2162: and
1.38 sjg 2163: .Ev MAKEOBJDIR
1.117 lukem 2164: may only be set in the environment or on the command line to
1.38 sjg 2165: .Nm
1.117 lukem 2166: and not as makefile variables;
2167: see the description of
2168: .Ql Va .OBJDIR
2169: for more details.
1.1 cgd 2170: .Sh FILES
2171: .Bl -tag -width /usr/share/mk -compact
2172: .It .depend
2173: list of dependencies
2174: .It Makefile
2175: list of dependencies
2176: .It makefile
2177: list of dependencies
2178: .It sys.mk
2179: system makefile
2180: .It /usr/share/mk
2181: system makefile directory
2182: .El
1.128 dsl 2183: .Sh COMPATIBILITY
1.241 dholland 2184: The basic make syntax is compatible between different versions of make;
1.128 dsl 2185: however the special variables, variable modifiers and conditionals are not.
1.241 dholland 2186: .Ss Older versions
2187: An incomplete list of changes in older versions of
2188: .Nm :
2189: .Pp
2190: The way that .for loop variables are substituted changed after
2191: .Nx 5.0
2192: so that they still appear to be variable expansions.
2193: In particular this stops them being treated as syntax, and removes some
2194: obscure problems using them in .if statements.
1.128 dsl 2195: .Pp
1.129 wiz 2196: The way that parallel makes are scheduled changed in
1.130 wiz 2197: .Nx 4.0
1.193 wiz 2198: so that .ORDER and .WAIT apply recursively to the dependent nodes.
1.128 dsl 2199: The algorithms used may change again in the future.
1.241 dholland 2200: .Ss Other make dialects
2201: Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not
2202: support most of the features of
2203: .Nm
2204: as described in this manual.
2205: Most notably:
2206: .Bl -bullet -offset indent
2207: .It
2208: The
2209: .Ic .WAIT
2210: and
2211: .Ic .ORDER
2212: declarations and most functionality pertaining to parallelization.
2213: (GNU make supports parallelization but lacks these features needed to
2214: control it effectively.)
2215: .It
2216: Directives, including for loops and conditionals and most of the
2217: forms of include files.
2218: (GNU make has its own incompatible and less powerful syntax for
2219: conditionals.)
2220: .It
2221: All built-in variables that begin with a dot.
2222: .It
2223: Most of the special sources and targets that begin with a dot,
2224: with the notable exception of
2225: .Ic .PHONY ,
2226: .Ic .PRECIOUS ,
2227: and
1.243 apb 2228: .Ic .SUFFIXES .
1.241 dholland 2229: .It
2230: Variable modifiers, except for the
2231: .Dl :old=new
2232: string substitution, which does not portably support globbing with
2233: .Ql %
2234: and historically only works on declared suffixes.
2235: .It
2236: The
2237: .Ic $>
2238: variable even in its short form; most makes support this functionality
2239: but its name varies.
2240: .El
2241: .Pp
2242: Some features are somewhat more portable, such as assignment with
2243: .Ic += ,
2244: .Ic ?= ,
2245: and
2246: .Ic != .
2247: The
2248: .Ic .PATH
2249: functionality is based on an older feature
2250: .Ic VPATH
2251: found in GNU make and many versions of SVR4 make; however,
2252: historically its behavior is too ill-defined (and too buggy) to rely
2253: upon.
1.152 dsl 2254: .Pp
1.241 dholland 2255: The
2256: .Ic $@
2257: and
2258: .Ic $<
2259: variables are more or less universally portable, as is the
2260: .Ic $(MAKE)
2261: variable.
2262: Basic use of suffix rules (for files only in the current directory,
2263: not trying to chain transformations together, etc.) is also reasonably
2264: portable.
1.153 wiz 2265: .Sh SEE ALSO
2266: .Xr mkdep 1
2267: .Sh HISTORY
2268: A
2269: .Nm
2270: command appeared in
2271: .At v7 .
1.190 christos 2272: This
2273: .Nm
2274: implementation is based on Adam De Boor's pmake program which was written
1.209 christos 2275: for Sprite at Berkeley.
1.190 christos 2276: It was designed to be a parallel distributed make running jobs on different
1.191 wiz 2277: machines using a daemon called
1.190 christos 2278: .Dq customs .
1.237 dholland 2279: .Pp
2280: Historically the target/dependency
2281: .Dq FRC
2282: has been used to FoRCe rebuilding (since the target/dependency
2283: does not exist... unless someone creates an
2284: .Dq FRC
2285: file).
1.152 dsl 2286: .Sh BUGS
2287: The
2288: .Nm
2289: syntax is difficult to parse without actually acting of the data.
2290: For instance finding the end of a variable use should involve scanning each
2291: the modifiers using the correct terminator for each field.
2292: In many places
2293: .Nm
2294: just counts {} and () in order to find the end of a variable expansion.
2295: .Pp
1.153 wiz 2296: There is no way of escaping a space character in a filename.
CVSweb <webmaster@jp.NetBSD.org>