1BMAKE(1) FreeBSD General Commands Manual BMAKE(1) 2 3[1mNAME[0m 4 [1mbmake [22m-- maintain program dependencies 5 6[1mSYNOPSIS[0m 7 [1mbmake [22m[[1m-BeikNnqrSstWwX[22m] [[1m-C [4m[22mdirectory[24m] [[1m-D [4m[22mvariable[24m] [[1m-d [4m[22mflags[24m] 8 [[1m-f [4m[22mmakefile[24m] [[1m-I [4m[22mdirectory[24m] [[1m-J [4m[22mprivate[24m] [[1m-j [4m[22mmax_jobs[24m] 9 [[1m-m [4m[22mdirectory[24m] [[1m-T [4m[22mfile[24m] [[1m-V [4m[22mvariable[24m] [[1m-v [4m[22mvariable[24m] 10 [[4mvariable[24m[1m=[4m[22mvalue[24m] [[4mtarget[24m ...] 11 12[1mDESCRIPTION[0m 13 [1mbmake [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 [1m-f [4m[22mmakefile[24m option is given, 16 [1mbmake [22mtries to open `[4mmakefile[24m' then `[4mMakefile[24m' in order to find the spec- 17 ifications. If the file `[4m.depend[24m' exists, it is read, see mkdep(1). 18 19 This manual page is intended as a reference document only. For a more 20 thorough description of [1mbmake [22mand makefiles, please refer to [4mPMake[24m [4m-[24m [4mA[0m 21 [4mTutorial[24m (from 1993). 22 23 [1mbmake [22mprepends the contents of the MAKEFLAGS environment variable to the 24 command line arguments before parsing them. 25 26 The options are as follows: 27 28 [1m-B [22mTry to be backwards compatible by executing a single shell per 29 command and by making the sources of a dependency line in se- 30 quence. 31 32 [1m-C [4m[22mdirectory[0m 33 Change to [4mdirectory[24m before reading the makefiles or doing any- 34 thing else. If multiple [1m-C [22moptions are specified, each is inter- 35 preted relative to the previous one: [1m-C [4m[22m/[24m [1m-C [4m[22metc[24m is equivalent to 36 [1m-C [4m[22m/etc[24m. 37 38 [1m-D [4m[22mvariable[0m 39 Define [4mvariable[24m to be 1, in the global scope. 40 41 [1m-d [22m[[1m-[22m][4mflags[0m 42 Turn on debugging, and specify which portions of [1mbmake [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 [1mF [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 [4mflags[24m are: 51 52 [1mA [22mPrint all possible debugging information; equivalent to 53 specifying all of the debugging flags. 54 55 [1ma [22mPrint debugging information about archive searching and 56 caching. 57 58 [1mC [22mPrint debugging information about the current working di- 59 rectory. 60 61 [1mc [22mPrint debugging information about conditional evaluation. 62 63 [1md [22mPrint debugging information about directory searching and 64 caching. 65 66 [1me [22mPrint debugging information about failed commands and 67 targets. 68 69 [1mF[22m[[1m+[22m][4mfilename[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 [1mF [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. 80 81 [1mf [22mPrint debugging information about loop evaluation. 82 83 [1mg1 [22mPrint the input graph before making anything. 84 85 [1mg2 [22mPrint the input graph after making everything, or before 86 exiting on error. 87 88 [1mg3 [22mPrint the input graph before exiting on error. 89 90 [1mh [22mPrint debugging information about hash table operations. 91 92 [1mj [22mPrint debugging information about running multiple 93 shells. 94 95 [1mL [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. 98 99 [1ml [22mPrint commands in Makefiles regardless of whether or not 100 they are prefixed by `@' or other "quiet" flags. Also 101 known as "loud" behavior. 102 103 [1mM [22mPrint debugging information about "meta" mode decisions 104 about targets. 105 106 [1mm [22mPrint debugging information about making targets, includ- 107 ing modification dates. 108 109 [1mn [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 [4m/tmp[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 [4mmakeXXXXXX[24m. [4mNOTE[24m: This can 115 create many files in TMPDIR or [4m/tmp[24m, so use with care. 116 117 [1mp [22mPrint debugging information about makefile parsing. 118 119 [1ms [22mPrint debugging information about suffix-transformation 120 rules. 121 122 [1mt [22mPrint debugging information about target list mainte- 123 nance. 124 125 [1mV [22mForce the [1m-V [22moption to print raw values of variables, 126 overriding the default behavior set via 127 [4m.MAKE.EXPAND_VARIABLES[24m. 128 129 [1mv [22mPrint debugging information about variable assignment and 130 expansion. 131 132 [1mx [22mRun shell commands with [1m-x [22mso the actual commands are 133 printed as they are executed. 134 135 [1m-e [22mLet environment variables override global variables within make- 136 files. 137 138 [1m-f [4m[22mmakefile[0m 139 Specify a makefile to read instead of the default [4mmakefile[24m or 140 [4mMakefile[24m. If [4mmakefile[24m is `-', standard input is read. Multiple 141 makefiles may be specified, and are read in the order specified. 142 143 [1m-I [4m[22mdirectory[0m 144 Specify a directory in which to search for makefiles and included 145 makefiles. The system makefile directory (or directories, see 146 the [1m-m [22moption) is automatically included as part of this list. 147 148 [1m-i [22mIgnore non-zero exit of shell commands in the makefile. Equiva- 149 lent to specifying `-' before each command line in the makefile. 150 151 [1m-J [4m[22mprivate[0m 152 This option should [4mnot[24m be specified by the user. 153 154 When the [1m-j [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. 157 158 [1m-j [4m[22mmax_jobs[0m 159 Specify the maximum number of jobs that [1mbmake [22mmay have running at 160 any one time. If [4mmax_jobs[24m is a floating point number, or ends 161 with `C', then the value is multiplied by the number of CPUs re- 162 ported online by sysconf(3). The value of [4mmax_jobs[24m is saved in 163 [4m.MAKE.JOBS[24m. Turns compatibility mode off, unless the [1m-B [22moption 164 is also specified. When compatibility mode is off, all commands 165 associated with a target are executed in a single shell invoca- 166 tion as opposed to the traditional one shell invocation per line. 167 This can break traditional scripts which change directories on 168 each command invocation and then expect to start with a fresh en- 169 vironment on the next line. It is more efficient to correct the 170 scripts rather than turn backwards compatibility on. 171 172 A job token pool with [4mmax_jobs[24m tokens is used to control the to- 173 tal number of jobs running. Each instance of [1mbmake [22mwill wait for 174 a token from the pool before running a new job. 175 176 [1m-k [22mContinue processing after errors are encountered, but only on 177 those targets that do not depend on the target whose creation 178 caused the error. 179 180 [1m-m [4m[22mdirectory[0m 181 Specify a directory in which to search for [4msys.mk[24m and makefiles 182 included via the <[4mfile[24m>-style include statement. The [1m-m [22moption 183 can be used multiple times to form a search path. This path 184 overrides the default system include path [4m/usr/share/mk[24m. Fur- 185 thermore, the system include path is appended to the search path 186 used for "[4mfile[24m"-style include statements (see the [1m-I [22moption). 187 The system include path can be referenced via the read-only vari- 188 able [4m.SYSPATH[24m. 189 190 If a directory name in the [1m-m [22margument (or the MAKESYSPATH envi- 191 ronment variable) starts with the string `.../', [1mbmake [22msearches 192 for the specified file or directory named in the remaining part 193 of the argument string. The search starts with the current di- 194 rectory and then works upward towards the root of the file sys- 195 tem. If the search is successful, the resulting directory re- 196 places the `.../' specification in the [1m-m [22margument. This feature 197 allows [1mbmake [22mto easily search in the current source tree for cus- 198 tomized [4msys.mk[24m files (e.g., by using `.../mk/sys.mk' as an argu- 199 ment). 200 201 [1m-n [22mDisplay the commands that would have been executed, but do not 202 actually execute them unless the target depends on the [4m.MAKE[24m spe- 203 cial source (see below) or the command is prefixed with `[1m+[22m'. 204 205 [1m-N [22mDisplay the commands that would have been executed, but do not 206 actually execute any of them; useful for debugging top-level 207 makefiles without descending into subdirectories. 208 209 [1m-q [22mDo not execute any commands, instead exit 0 if the specified tar- 210 gets are up to date, and 1 otherwise. 211 212 [1m-r [22mDo not use the built-in rules specified in the system makefile. 213 214 [1m-S [22mStop processing if an error is encountered. This is the default 215 behavior and the opposite of [1m-k[22m. 216 217 [1m-s [22mDo not echo any commands as they are executed. Equivalent to 218 specifying `[1m@[22m' before each command line in the makefile. 219 220 [1m-T [4m[22mtracefile[0m 221 When used with the [1m-j [22mflag, append a trace record to [4mtracefile[0m 222 for each job started and completed. 223 224 [1m-t [22mRather than re-building a target as specified in the makefile, 225 create it or update its modification time to make it appear up- 226 to-date. 227 228 [1m-V [4m[22mvariable[0m 229 Print the value of [4mvariable[24m. Do not build any targets. Multiple 230 instances of this option may be specified; the variables are 231 printed one per line, with a blank line for each null or unde- 232 fined variable. The value printed is extracted from the global 233 scope after all makefiles have been read. 234 235 By default, the raw variable contents (which may include addi- 236 tional unexpanded variable references) are shown. If [4mvariable[0m 237 contains a `$', it is not interpreted as a variable name but 238 rather as an expression. Its value is expanded before printing. 239 The value is also expanded before printing if 240 [4m.MAKE.EXPAND_VARIABLES[24m is set to true and the [1m-dV [22moption has not 241 been used to override it. 242 243 Note that loop-local and target-local variables, as well as val- 244 ues taken temporarily by global variables during makefile pro- 245 cessing, are not accessible via this option. The [1m-dv [22mdebug mode 246 can be used to see these at the cost of generating substantial 247 extraneous output. 248 249 [1m-v [4m[22mvariable[0m 250 Like [1m-V[22m, but all printed variables are always expanded to their 251 complete value. The last occurrence of [1m-V [22mor [1m-v [22mdecides whether 252 all variables are expanded or not. 253 254 [1m-W [22mTreat any warnings during makefile parsing as errors. 255 256 [1m-w [22mPrint entering and leaving directory messages, pre and post pro- 257 cessing. 258 259 [1m-X [22mDon't export variables passed on the command line to the environ- 260 ment individually. Variables passed on the command line are 261 still exported via the MAKEFLAGS environment variable. This op- 262 tion may be useful on systems which have a small limit on the 263 size of command arguments. 264 265 [4mvariable[24m[1m=[4m[22mvalue[0m 266 Set the value of the variable [4mvariable[24m to [4mvalue[24m. Normally, all 267 values passed on the command line are also exported to sub-makes 268 in the environment. The [1m-X [22mflag disables this behavior. Vari- 269 able assignments should follow options for POSIX compatibility 270 but no ordering is enforced. 271 272 There are several different types of lines in a makefile: dependency 273 specifications, shell commands, variable assignments, include statements, 274 conditional directives, for loops, other directives, and comments. 275 276 Lines may be continued from one line to the next by ending them with a 277 backslash (`\'). The trailing newline character and initial whitespace 278 on the following line are compressed into a single space. 279 280[1mFILE DEPENDENCY SPECIFICATIONS[0m 281 Dependency lines consist of one or more targets, an operator, and zero or 282 more sources. This creates a relationship where the targets "depend" on 283 the sources and are customarily created from them. A target is consid- 284 ered out of date if it does not exist, or if its modification time is 285 less than that of any of its sources. An out-of-date target is re-cre- 286 ated, but not until all sources have been examined and themselves re-cre- 287 ated as needed. Three operators may be used: 288 289 [1m: [22mMany dependency lines may name this target but only one may have 290 attached shell commands. All sources named in all dependency lines 291 are considered together, and if needed the attached shell commands 292 are run to create or re-create the target. If [1mbmake [22mis inter- 293 rupted, the target is removed. 294 295 [1m! [22mThe same, but the target is always re-created whether or not it is 296 out of date. 297 298 [1m:: [22mAny dependency line may have attached shell commands, but each one 299 is handled independently: its sources are considered and the at- 300 tached shell commands are run if the target is out of date with re- 301 spect to (only) those sources. Thus, different groups of the at- 302 tached shell commands may be run depending on the circumstances. 303 Furthermore, unlike [1m:[22m, for dependency lines with no sources, the 304 attached shell commands are always run. Also unlike [1m:[22m, the target 305 is not removed if [1mbmake [22mis interrupted. 306 307 All dependency lines mentioning a particular target must use the same op- 308 erator. 309 310 Targets and sources may contain the shell wildcard values `?', `*', `[]', 311 and `{}'. The values `?', `*', and `[]' may only be used as part of the 312 final component of the target or source, and only match existing files. 313 The value `{}' need not necessarily be used to describe existing files. 314 Expansion is in directory order, not alphabetically as done in the shell. 315 316[1mSHELL COMMANDS[0m 317 Each target may have associated with it one or more lines of shell com- 318 mands, normally used to create the target. Each of the lines in this 319 script [4mmust[24m be preceded by a tab. (For historical reasons, spaces are 320 not accepted.) While targets can occur in many dependency lines if de- 321 sired, by default only one of these rules may be followed by a creation 322 script. If the `[1m::[22m' operator is used, however, all rules may include 323 scripts, and the respective scripts are executed in the order found. 324 325 Each line is treated as a separate shell command, unless the end of line 326 is escaped with a backslash `\', in which case that line and the next are 327 combined. If the first characters of the command are any combination of 328 `[1m@[22m', `[1m+[22m', or `[1m-[22m', the command is treated specially. 329 330 [1m@ [22mcauses the command not to be echoed before it is executed. 331 332 [1m+ [22mcauses the command to be executed even when [1m-n [22mis given. 333 This is similar to the effect of the [4m.MAKE[24m special source, 334 except that the effect can be limited to a single line of a 335 script. 336 337 [1m- [22min compatibility mode causes any non-zero exit status of 338 the command line to be ignored. 339 340 When [1mbmake [22mis run in jobs mode with [1m-j [4m[22mmax_jobs[24m, the entire script for 341 the target is fed to a single instance of the shell. In compatibility 342 (non-jobs) mode, each command is run in a separate process. If the com- 343 mand contains any shell meta characters (`#=|^(){};&<>*?[]:$`\\n'), it is 344 passed to the shell; otherwise [1mbmake [22mattempts direct execution. If a 345 line starts with `[1m-[22m' and the shell has ErrCtl enabled, failure of the 346 command line is ignored as in compatibility mode. Otherwise `[1m-[22m' affects 347 the entire job; the script stops at the first command line that fails, 348 but the target is not deemed to have failed. 349 350 Makefiles should be written so that the mode of [1mbmake [22moperation does not 351 change their behavior. For example, any command which uses "cd" or 352 "chdir" without the intention of changing the directory for subsequent 353 commands should be put in parentheses so it executes in a subshell. To 354 force the use of a single shell, escape the line breaks so as to make the 355 whole script one command. For example: 356 357 avoid-chdir-side-effects: 358 @echo "Building $@ in $$(pwd)" 359 @(cd ${.CURDIR} && ${MAKE} $@) 360 @echo "Back in $$(pwd)" 361 362 ensure-one-shell-regardless-of-mode: 363 @echo "Building $@ in $$(pwd)"; \ 364 (cd ${.CURDIR} && ${MAKE} $@); \ 365 echo "Back in $$(pwd)" 366 367 Since [1mbmake [22mchanges the current working directory to `[4m.OBJDIR[24m' before ex- 368 ecuting any targets, each child process starts with that as its current 369 working directory. 370 371[1mVARIABLE ASSIGNMENTS[0m 372 Variables in make behave much like macros in the C preprocessor. 373 374 Variable assignments have the form `[4mNAME[24m [4mop[24m [4mvalue[24m', where: 375 376 [4mNAME[24m is a single-word variable name, consisting, by tradition, 377 of all upper-case letters, 378 379 [4mop[24m is one of the variable assignment operators described be- 380 low, and 381 382 [4mvalue[24m is interpreted according to the variable assignment opera- 383 tor. 384 385 Whitespace around [4mNAME[24m, [4mop[24m and [4mvalue[24m is discarded. 386 387 [1mVariable assignment operators[0m 388 The five operators that assign values to variables are: 389 390 [1m= [22mAssign the value to the variable. Any previous value is over- 391 written. 392 393 [1m+= [22mAppend the value to the current value of the variable, separating 394 them by a single space. 395 396 [1m?= [22mAssign the value to the variable if it is not already defined. 397 398 [1m:= [22mExpand the value, then assign it to the variable. 399 400 [4mNOTE[24m: References to undefined variables are [4mnot[24m expanded. This 401 can cause problems when variable modifiers are used. 402 403 [1m!= [22mExpand the value and pass it to the shell for execution, then as- 404 sign the output from the child's standard output to the variable. 405 Any newlines in the result are replaced with spaces. 406 407 [1mExpansion of variables[0m 408 In most contexts where variables are expanded, `$$' expands to a single 409 dollar sign. In other contexts (most variable modifiers, string literals 410 in conditions), `\$' expands to a single dollar sign. 411 412 References to variables have the form [1m${[4m[22mname[24m[[1m:[4m[22mmodifiers[24m][1m} [22mor 413 [1m$([4m[22mname[24m[[1m:[4m[22mmodifiers[24m][1m)[22m. If the variable name consists of only a single 414 character and the expression contains no modifiers, the surrounding curly 415 braces or parentheses are not required. This shorter form is not recom- 416 mended. 417 418 If the variable name contains a dollar, the name itself is expanded 419 first. This allows almost arbitrary variable names, however names con- 420 taining dollar, braces, parentheses or whitespace are really best 421 avoided. 422 423 If the result of expanding a nested variable expression contains a dollar 424 sign (`$'), the result is subject to further expansion. 425 426 Variable substitution occurs at four distinct times, depending on where 427 the variable is being used. 428 429 1. Variables in dependency lines are expanded as the line is read. 430 431 2. Variables in conditionals are expanded individually, but only as far 432 as necessary to determine the result of the conditional. 433 434 3. Variables in shell commands are expanded when the shell command is 435 executed. 436 437 4. [1m.for [22mloop index variables are expanded on each loop iteration. Note 438 that other variables are not expanded when composing the body of a 439 loop, so the following example code: 440 441 .for i in 1 2 3 442 a+= ${i} 443 j= ${i} 444 b+= ${j} 445 .endfor 446 447 all: 448 @echo ${a} 449 @echo ${b} 450 451 prints: 452 453 1 2 3 454 3 3 3 455 456 After the loop is executed: 457 458 [4ma[24m contains `${:U1} ${:U2} ${:U3}', which expands to `1 2 459 3'. 460 461 [4mj[24m contains `${:U3}', which expands to `3'. 462 463 [4mb[24m contains `${j} ${j} ${j}', which expands to `${:U3} 464 ${:U3} ${:U3}' and further to `3 3 3'. 465 466 [1mVariable classes[0m 467 The four different classes of variables (in order of increasing prece- 468 dence) are: 469 470 Environment variables 471 Variables defined as part of [1mbmake[22m's environment. 472 473 Global variables 474 Variables defined in the makefile or in included makefiles. 475 476 Command line variables 477 Variables defined as part of the command line. 478 479 Local variables 480 Variables that are defined specific to a certain target. 481 482 Local variables can be set on a dependency line, unless 483 [4m.MAKE.TARGET_LOCAL_VARIABLES[24m is set to `false'. The rest of the line 484 (which already has had global variables expanded) is the variable value. 485 For example: 486 487 COMPILER_WRAPPERS= ccache distcc icecc 488 489 ${OBJS}: .MAKE.META.CMP_FILTER=${COMPILER_WRAPPERS:S,^,N,} 490 491 Only the targets `${OBJS}' are impacted by that filter (in "meta" mode) 492 and simply enabling/disabling any of the compiler wrappers does not ren- 493 der all of those targets out-of-date. 494 495 [4mNOTE[24m: target-local variable assignments behave differently in that; 496 497 [1m+= [22mOnly appends to a previous local assignment for the same 498 target and variable. 499 500 [1m:= [22mIs redundant with respect to global variables, which have 501 already been expanded. 502 503 The seven built-in local variables are: 504 505 [4m.ALLSRC[24m The list of all sources for this target; also known as 506 `[4m>[24m'. 507 508 [4m.ARCHIVE[24m The name of the archive file; also known as `[4m![24m'. 509 510 [4m.IMPSRC[24m In suffix-transformation rules, the name/path of the 511 source from which the target is to be transformed (the 512 "implied" source); also known as `[4m<[24m'. It is not defined 513 in explicit rules. 514 515 [4m.MEMBER[24m The name of the archive member; also known as `[4m%[24m'. 516 517 [4m.OODATE[24m The list of sources for this target that were deemed out- 518 of-date; also known as `[4m?[24m'. 519 520 [4m.PREFIX[24m The name of the target with suffix (if declared in 521 [1m.SUFFIXES[22m) removed; also known as `[4m*[24m'. 522 523 [4m.TARGET[24m The name of the target; also known as `[4m@[24m'. For compati- 524 bility with other makes this is an alias for [4m.ARCHIVE[24m in 525 archive member rules. 526 527 The shorter forms (`[4m>[24m', `[4m![24m', `[4m<[24m', `[4m%[24m', `[4m?[24m', `[4m*[24m', and `[4m@[24m') are permitted 528 for backward compatibility with historical makefiles and legacy POSIX 529 make and are not recommended. 530 531 Variants of these variables with the punctuation followed immediately by 532 `D' or `F', e.g. `$(@D)', are legacy forms equivalent to using the `:H' 533 and `:T' modifiers. These forms are accepted for compatibility with AT&T 534 System V UNIX makefiles and POSIX but are not recommended. 535 536 Four of the local variables may be used in sources on dependency lines 537 because they expand to the proper value for each target on the line. 538 These variables are `[4m.TARGET[24m', `[4m.PREFIX[24m', `[4m.ARCHIVE[24m', and `[4m.MEMBER[24m'. 539 540 [1mAdditional built-in variables[0m 541 In addition, [1mbmake [22msets or knows about the following variables: 542 543 [4m.ALLTARGETS[0m 544 The list of all targets encountered in the makefiles. If evalu- 545 ated during makefile parsing, lists only those targets encoun- 546 tered thus far. 547 548 [4m.CURDIR[0m 549 A path to the directory where [1mbmake [22mwas executed. Refer to the 550 description of `[4mPWD[24m' for more details. 551 552 [4m.ERROR_CMD[0m 553 Is used in error handling, see [4mMAKE_PRINT_VAR_ON_ERROR[24m. 554 555 [4m.ERROR_CWD[0m 556 Is used in error handling, see [4mMAKE_PRINT_VAR_ON_ERROR[24m. 557 558 [4m.ERROR_META_FILE[0m 559 Is used in error handling in "meta" mode, see 560 [4mMAKE_PRINT_VAR_ON_ERROR[24m. 561 562 [4m.ERROR_TARGET[0m 563 Is used in error handling, see [4mMAKE_PRINT_VAR_ON_ERROR[24m. 564 565 [4m.INCLUDEDFROMDIR[0m 566 The directory of the file this makefile was included from. 567 568 [4m.INCLUDEDFROMFILE[0m 569 The filename of the file this makefile was included from. 570 571 [4mMACHINE[0m 572 The machine hardware name, see uname(1). 573 574 [4mMACHINE_ARCH[0m 575 The machine processor architecture name, see uname(1). 576 577 [4mMAKE[24m The name that [1mbmake [22mwas executed with ([4margv[0][24m). 578 579 [4m.MAKE[24m The same as [4mMAKE[24m, for compatibility. The preferred variable to 580 use is the environment variable MAKE because it is more compati- 581 ble with other make variants and cannot be confused with the spe- 582 cial target with the same name. 583 584 [4m.MAKE.DEPENDFILE[0m 585 Names the makefile (default `[4m.depend[24m') from which generated de- 586 pendencies are read. 587 588 [4m.MAKE.DIE_QUIETLY[0m 589 If set to `true', do not print error information at the end. 590 591 [4m.MAKE.EXPAND_VARIABLES[0m 592 A boolean that controls the default behavior of the [1m-V [22moption. 593 If true, variable values printed with [1m-V [22mare fully expanded; if 594 false, the raw variable contents (which may include additional 595 unexpanded variable references) are shown. 596 597 [4m.MAKE.EXPORTED[0m 598 The list of variables exported by [1mbmake[22m. 599 600 [4mMAKEFILE[0m 601 The top-level makefile that is currently read, as given in the 602 command line. 603 604 [4m.MAKEFLAGS[0m 605 The environment variable `MAKEFLAGS' may contain anything that 606 may be specified on [1mbmake[22m's command line. Anything specified on 607 [1mbmake[22m's command line is appended to the [4m.MAKEFLAGS[24m variable, 608 which is then added to the environment for all programs that 609 [1mbmake [22mexecutes. 610 611 [4m.MAKE.GID[0m 612 The numeric group ID of the user running [1mbmake[22m. It is read-only. 613 614 [4m.MAKE.JOB.PREFIX[0m 615 If [1mbmake [22mis run with [1m-j[22m, the output for each target is prefixed 616 with a token 617 --- [4mtarget[24m --- 618 the first part of which can be controlled via [4m.MAKE.JOB.PREFIX[24m. 619 If [4m.MAKE.JOB.PREFIX[24m is empty, no token is printed. For example, 620 setting [4m.MAKE.JOB.PREFIX[24m to 621 `${.newline}---${.MAKE:T}[${.MAKE.PID}]' would produce tokens 622 like 623 ---make[1234] [4mtarget[24m --- 624 making it easier to track the degree of parallelism being 625 achieved. 626 627 [4m.MAKE.JOBS[0m 628 The argument to the [1m-j [22moption. 629 630 [4m.MAKE.JOBS.C[0m 631 A read-only boolean that indicates whether the [1m-j [22moption supports 632 use of `C'. 633 634 [4m.MAKE.LEVEL[0m 635 The recursion depth of [1mbmake[22m. The top-level instance of [1mbmake[0m 636 has level 0, and each child make has its parent level plus 1. 637 This allows tests like: .if ${.MAKE.LEVEL} == 0 to protect things 638 which should only be evaluated in the top-level instance of 639 [1mbmake[22m. 640 641 [4m.MAKE.LEVEL.ENV[0m 642 The name of the environment variable that stores the level of 643 nested calls to [1mbmake[22m. 644 645 [4m.MAKE.MAKEFILE_PREFERENCE[0m 646 The ordered list of makefile names (default `[4mmakefile[24m', 647 `[4mMakefile[24m') that [1mbmake [22mlooks for. 648 649 [4m.MAKE.MAKEFILES[0m 650 The list of makefiles read by [1mbmake[22m, which is useful for tracking 651 dependencies. Each makefile is recorded only once, regardless of 652 the number of times read. 653 654 [4m.MAKE.META.BAILIWICK[0m 655 In "meta" mode, provides a list of prefixes which match the di- 656 rectories controlled by [1mbmake[22m. If a file that was generated out- 657 side of [4m.OBJDIR[24m but within said bailiwick is missing, the current 658 target is considered out-of-date. 659 660 [4m.MAKE.META.CMP_FILTER[0m 661 In "meta" mode, it can (very rarely!) be useful to filter command 662 lines before comparison. This variable can be set to a set of 663 modifiers that are applied to each line of the old and new com- 664 mand that differ, if the filtered commands still differ, the tar- 665 get is considered out-of-date. 666 667 [4m.MAKE.META.CREATED[0m 668 In "meta" mode, this variable contains a list of all the meta 669 files updated. If not empty, it can be used to trigger process- 670 ing of [4m.MAKE.META.FILES[24m. 671 672 [4m.MAKE.META.FILES[0m 673 In "meta" mode, this variable contains a list of all the meta 674 files used (updated or not). This list can be used to process 675 the meta files to extract dependency information. 676 677 [4m.MAKE.META.IGNORE_FILTER[0m 678 Provides a list of variable modifiers to apply to each pathname. 679 Ignore if the expansion is an empty string. 680 681 [4m.MAKE.META.IGNORE_PATHS[0m 682 Provides a list of path prefixes that should be ignored; because 683 the contents are expected to change over time. The default list 684 includes: `[4m/dev[24m [4m/etc[24m [4m/proc[24m [4m/tmp[24m [4m/var/run[24m [4m/var/tmp[24m' 685 686 [4m.MAKE.META.IGNORE_PATTERNS[0m 687 Provides a list of patterns to match against pathnames. Ignore 688 any that match. 689 690 [4m.MAKE.META.PREFIX[0m 691 Defines the message printed for each meta file updated in "meta 692 verbose" mode. The default value is: 693 Building ${.TARGET:H:tA}/${.TARGET:T} 694 695 [4m.MAKE.MODE[0m 696 Processed after reading all makefiles. Affects the mode that 697 [1mbmake [22mruns in. It can contain these keywords: 698 699 [1mcompat [22mLike [1m-B[22m, puts [1mbmake [22minto "compat" mode. 700 701 [1mmeta [22mPuts [1mbmake [22minto "meta" mode, where meta files are created 702 for each target to capture the command run, the output 703 generated, and if filemon(4) is available, the system 704 calls which are of interest to [1mbmake[22m. The captured out- 705 put can be useful when diagnosing errors. 706 707 [1mcurdirOk=[4m[22mbf[0m 708 By default, [1mbmake [22mdoes not create [4m.meta[24m files in 709 `[4m.CURDIR[24m'. This can be overridden by setting [4mbf[24m to a 710 value which represents true. 711 712 [1mmissing-meta=[4m[22mbf[0m 713 If [4mbf[24m is true, a missing [4m.meta[24m file makes the target out- 714 of-date. 715 716 [1mmissing-filemon=[4m[22mbf[0m 717 If [4mbf[24m is true, missing filemon data makes the target out- 718 of-date. 719 720 [1mnofilemon[0m 721 Do not use filemon(4). 722 723 [1menv [22mFor debugging, it can be useful to include the environ- 724 ment in the [4m.meta[24m file. 725 726 [1mverbose[0m 727 If in "meta" mode, print a clue about the target being 728 built. This is useful if the build is otherwise running 729 silently. The message printed is the expanded value of 730 [4m.MAKE.META.PREFIX[24m. 731 732 [1mignore-cmd[0m 733 Some makefiles have commands which are simply not stable. 734 This keyword causes them to be ignored for determining 735 whether a target is out of date in "meta" mode. See also 736 [1m.NOMETA_CMP[22m. 737 738 [1msilent=[4m[22mbf[0m 739 If [4mbf[24m is true, when a .meta file is created, mark the 740 target [1m.SILENT[22m. 741 742 [1mrandomize-targets[0m 743 In both compat and parallel mode, do not make the targets 744 in the usual order, but instead randomize their order. 745 This mode can be used to detect undeclared dependencies 746 between files. 747 748 [4mMAKEOBJDIR[0m 749 Used to create files in a separate directory, see [4m.OBJDIR[24m. 750 751 [4mMAKE_OBJDIR_CHECK_WRITABLE[0m 752 Used to force a separate directory for the created files, even if 753 that directory is not writable, see [4m.OBJDIR[24m. 754 755 [4mMAKEOBJDIRPREFIX[0m 756 Used to create files in a separate directory, see [4m.OBJDIR[24m. 757 758 [4m.MAKE.OS[0m 759 The name of the operating system, see uname(1). It is read-only. 760 761 [4m.MAKEOVERRIDES[0m 762 This variable is used to record the names of variables assigned 763 to on the command line, so that they may be exported as part of 764 `MAKEFLAGS'. This behavior can be disabled by assigning an empty 765 value to `[4m.MAKEOVERRIDES[24m' within a makefile. Extra variables can 766 be exported from a makefile by appending their names to 767 `[4m.MAKEOVERRIDES[24m'. `MAKEFLAGS' is re-exported whenever 768 `[4m.MAKEOVERRIDES[24m' is modified. 769 770 [4m.MAKE.PATH_FILEMON[0m 771 If [1mbmake [22mwas built with filemon(4) support, this is set to the 772 path of the device node. This allows makefiles to test for this 773 support. 774 775 [4m.MAKE.PID[0m 776 The process ID of [1mbmake[22m. It is read-only. 777 778 [4m.MAKE.PPID[0m 779 The parent process ID of [1mbmake[22m. It is read-only. 780 781 [4mMAKE_PRINT_VAR_ON_ERROR[0m 782 When [1mbmake [22mstops due to an error, it sets `[4m.ERROR_TARGET[24m' to the 783 name of the target that failed, `[4m.ERROR_CMD[24m' to the commands of 784 the failed target, and in "meta" mode, it also sets `[4m.ERROR_CWD[24m' 785 to the getcwd(3), and `[4m.ERROR_META_FILE[24m' to the path of the meta 786 file (if any) describing the failed target. It then prints its 787 name and the value of `[4m.CURDIR[24m' as well as the value of any vari- 788 ables named in `[4mMAKE_PRINT_VAR_ON_ERROR[24m'. 789 790 [4m.MAKE.SAVE_DOLLARS[0m 791 If true, `$$' are preserved when doing `:=' assignments. The de- 792 fault is false, for backwards compatibility. Set to true for 793 compatability with other makes. If set to false, `$$' becomes 794 `$' per normal evaluation rules. 795 796 [4m.MAKE.TARGET_LOCAL_VARIABLES[0m 797 If set to `false', apparent variable assignments in dependency 798 lines are treated as normal sources. 799 800 [4m.MAKE.UID[0m 801 The numeric ID of the user running [1mbmake[22m. It is read-only. 802 803 [4m.newline[0m 804 This variable is simply assigned a newline character as its 805 value. It is read-only. This allows expansions using the [1m:@[0m 806 modifier to put a newline between iterations of the loop rather 807 than a space. For example, in case of an error, [1mbmake [22mprints the 808 variable names and their values using: 809 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 810 811 [4m.OBJDIR[0m 812 A path to the directory where the targets are built. Its value 813 is determined by trying to chdir(2) to the following directories 814 in order and using the first match: 815 816 1. [1m${MAKEOBJDIRPREFIX}${.CURDIR}[0m 817 818 (Only if `MAKEOBJDIRPREFIX' is set in the environment or on 819 the command line.) 820 821 2. [1m${MAKEOBJDIR}[0m 822 823 (Only if `MAKEOBJDIR' is set in the environment or on the 824 command line.) 825 826 3. [1m${.CURDIR}[4m[22m/obj.[24m[1m${MACHINE}[0m 827 828 4. [1m${.CURDIR}[4m[22m/obj[0m 829 830 5. [4m/usr/obj/[24m[1m${.CURDIR}[0m 831 832 6. [1m${.CURDIR}[0m 833 834 Variable expansion is performed on the value before it is used, 835 so expressions such as [1m${.CURDIR:S,^/usr/src,/var/obj,} [22mmay be 836 used. This is especially useful with `MAKEOBJDIR'. 837 838 `[4m.OBJDIR[24m' may be modified in the makefile via the special target 839 `[1m.OBJDIR[22m'. In all cases, [1mbmake [22mchanges to the specified direc- 840 tory if it exists, and sets `[4m.OBJDIR[24m' and `[4mPWD[24m' to that directory 841 before executing any targets. 842 843 Except in the case of an explicit `[1m.OBJDIR[22m' target, [1mbmake [22mchecks 844 that the specified directory is writable and ignores it if not. 845 This check can be skipped by setting the environment variable 846 `MAKE_OBJDIR_CHECK_WRITABLE' to "no". 847 848 [4m.PARSEDIR[0m 849 The directory name of the current makefile being parsed. 850 851 [4m.PARSEFILE[0m 852 The basename of the current makefile being parsed. This variable 853 and `[4m.PARSEDIR[24m' are both set only while the makefiles are being 854 parsed. To retain their current values, assign them to a vari- 855 able using assignment with expansion `[1m:=[22m'. 856 857 [4m.PATH[24m The space-separated list of directories that [1mbmake [22msearches for 858 files. To update this search list, use the special target 859 `[1m.PATH[22m' rather than modifying the variable directly. 860 861 [4m%POSIX[24m Is set in POSIX mode, see the special `[4m.POSIX[24m' target. 862 863 [4mPWD[24m Alternate path to the current directory. [1mbmake [22mnormally sets 864 `[4m.CURDIR[24m' to the canonical path given by getcwd(3). However, if 865 the environment variable `PWD' is set and gives a path to the 866 current directory, [1mbmake [22msets `[4m.CURDIR[24m' to the value of `PWD' in- 867 stead. This behavior is disabled if `MAKEOBJDIRPREFIX' is set or 868 `MAKEOBJDIR' contains a variable transform. `[4mPWD[24m' is set to the 869 value of `[4m.OBJDIR[24m' for all programs which [1mbmake [22mexecutes. 870 871 [4m.SHELL[24m The pathname of the shell used to run target scripts. It is 872 read-only. 873 874 [4m.SUFFIXES[0m 875 The list of known suffixes. It is read-only. 876 877 [4m.SYSPATH[0m 878 The space-separated list of directories that [1mbmake [22msearches for 879 makefiles, referred to as the system include path. To update 880 this search list, use the special target `[1m.SYSPATH[22m' rather than 881 modifying the variable which is read-only. 882 883 [4m.TARGETS[0m 884 The list of targets explicitly specified on the command line, if 885 any. 886 887 [4mVPATH[24m The colon-separated (":") list of directories that [1mbmake [22msearches 888 for files. This variable is supported for compatibility with old 889 make programs only, use `[4m.PATH[24m' instead. 890 891 [1mVariable modifiers[0m 892 The general format of a variable expansion is: 893 894 [1m${[4m[22mvariable[24m[[1m:[4m[22mmodifier[24m[[1m:[22m...]][1m}[0m 895 896 Each modifier begins with a colon. To escape a colon, precede it with a 897 backslash `\'. 898 899 A list of indirect modifiers can be specified via a variable, as follows: 900 901 [4mmodifier_variable[24m = [4mmodifier[24m[[1m:[22m...] 902 903 [1m${[4m[22mvariable[24m[1m:${[4m[22mmodifier_variable[24m[1m}[22m[[1m:[22m...][1m}[0m 904 905 In this case, the first modifier in the [4mmodifier_variable[24m does not start 906 with a colon, since that colon already occurs in the referencing vari- 907 able. If any of the modifiers in the [4mmodifier_variable[24m contains a dollar 908 sign (`$'), these must be doubled to avoid early expansion. 909 910 Some modifiers interpret the expression value as a single string, others 911 treat the expression value as a whitespace-separated list of words. When 912 splitting a string into words, whitespace can be escaped using double 913 quotes, single quotes and backslashes, like in the shell. The quotes and 914 backslashes are retained in the words. 915 916 The supported modifiers are: 917 918 [1m:E [22mReplaces each word with its suffix. 919 920 [1m:H [22mReplaces each word with its dirname. 921 922 [1m:M[4m[22mpattern[0m 923 Selects only those words that match [4mpattern[24m. The standard shell 924 wildcard characters (`*', `?', and `[]') may be used. The wildcard 925 characters may be escaped with a backslash (`\'). As a consequence 926 of the way values are split into words, matched, and then joined, 927 the construct `${VAR:M*}' removes all leading and trailing white- 928 space and normalizes the inter-word spacing to a single space. 929 930 [1m:N[4m[22mpattern[0m 931 This is the opposite of `[1m:M[22m', selecting all words which do [4mnot[24m match 932 [4mpattern[24m. 933 934 [1m:O [22mOrders the words lexicographically. 935 936 [1m:On [22mOrders the words numerically. A number followed by one of `k', `M' 937 or `G' is multiplied by the appropriate factor, which is 1024 for 938 `k', 1048576 for `M', or 1073741824 for `G'. Both upper- and lower- 939 case letters are accepted. 940 941 [1m:Or [22mOrders the words in reverse lexicographical order. 942 943 [1m:Orn[0m 944 Orders the words in reverse numerical order. 945 946 [1m:Ox [22mShuffles the words. The results are different each time you are re- 947 ferring to the modified variable; use the assignment with expansion 948 `[1m:=[22m' to prevent such behavior. For example, 949 950 LIST= uno due tre quattro 951 RANDOM_LIST= ${LIST:Ox} 952 STATIC_RANDOM_LIST:= ${LIST:Ox} 953 954 all: 955 @echo "${RANDOM_LIST}" 956 @echo "${RANDOM_LIST}" 957 @echo "${STATIC_RANDOM_LIST}" 958 @echo "${STATIC_RANDOM_LIST}" 959 may produce output similar to: 960 961 quattro due tre uno 962 tre due quattro uno 963 due uno quattro tre 964 due uno quattro tre 965 966 [1m:Q [22mQuotes every shell meta-character in the value, so that it can be 967 passed safely to the shell. 968 969 [1m:q [22mQuotes every shell meta-character in the value, and also doubles `$' 970 characters so that it can be passed safely through recursive invoca- 971 tions of [1mbmake[22m. This is equivalent to `[1m:S/\$/&&/g:Q[22m'. 972 973 [1m:R [22mReplaces each word with everything but its suffix. 974 975 [1m:range[22m[[1m=[4m[22mcount[24m] 976 The value is an integer sequence representing the words of the orig- 977 inal value, or the supplied [4mcount[24m. 978 979 [1m:gmtime[22m[[1m=[4m[22mtimestamp[24m] 980 The value is interpreted as a format string for strftime(3), using 981 gmtime(3), producing the formatted timestamp. Note: the `%s' format 982 should only be used with `[1m:localtime[22m'. If a [4mtimestamp[24m value is not 983 provided or is 0, the current time is used. 984 985 [1m:hash[0m 986 Computes a 32-bit hash of the value and encodes it as 8 hex digits. 987 988 [1m:localtime[22m[[1m=[4m[22mtimestamp[24m] 989 The value is interpreted as a format string for strftime(3), using 990 localtime(3), producing the formatted timestamp. If a [4mtimestamp[0m 991 value is not provided or is 0, the current time is used. 992 993 [1m:mtime[22m[[1m=[4m[22mtimestamp[24m] 994 Call stat(2) with each word as pathname; use `st_mtime' as the new 995 value. If stat(2) fails; use [4mtimestamp[24m or current time. If 996 [4mtimestamp[24m is set to `error', then stat(2) failure will cause an er- 997 ror. 998 999 [1m:tA [22mAttempts to convert the value to an absolute path using realpath(3). 1000 If that fails, the value is unchanged. 1001 1002 [1m:tl [22mConverts the value to lower-case letters. 1003 1004 [1m:ts[4m[22mc[0m 1005 When joining the words after a modifier that treats the value as 1006 words, the words are normally separated by a space. This modifier 1007 changes the separator to the character [4mc[24m. If [4mc[24m is omitted, no sepa- 1008 rator is used. The common escapes (including octal numeric codes) 1009 work as expected. 1010 1011 [1m:tu [22mConverts the value to upper-case letters. 1012 1013 [1m:tW [22mCauses subsequent modifiers to treat the value as a single word 1014 (possibly containing embedded whitespace). See also `[1m:[*][22m'. 1015 1016 [1m:tw [22mCauses the value to be treated as a list of words. See also `[1m:[@][22m'. 1017 1018 [1m:S[22m/[4mold_string[24m/[4mnew_string[24m/[[1m1gW[22m] 1019 Modifies the first occurrence of [4mold_string[24m in each word of the 1020 value, replacing it with [4mnew_string[24m. If a `g' is appended to the 1021 last delimiter of the pattern, all occurrences in each word are re- 1022 placed. If a `1' is appended to the last delimiter of the pattern, 1023 only the first occurrence is affected. If a `W' is appended to the 1024 last delimiter of the pattern, the value is treated as a single 1025 word. If [4mold_string[24m begins with a caret (`^'), [4mold_string[24m is an- 1026 chored at the beginning of each word. If [4mold_string[24m ends with a 1027 dollar sign (`$'), it is anchored at the end of each word. Inside 1028 [4mnew_string[24m, an ampersand (`&') is replaced by [4mold_string[24m (without 1029 the anchoring `^' or `$'). Any character may be used as the delim- 1030 iter for the parts of the modifier string. The anchoring, ampersand 1031 and delimiter characters can be escaped with a backslash (`\'). 1032 1033 Both [4mold_string[24m and [4mnew_string[24m may contain nested expressions. To 1034 prevent a dollar sign from starting a nested expression, escape it 1035 with a backslash. 1036 1037 [1m:C[22m/[4mpattern[24m/[4mreplacement[24m/[[1m1gW[22m] 1038 The [1m:C [22mmodifier works like the [1m:S [22mmodifier except that the old and 1039 new strings, instead of being simple strings, are an extended regu- 1040 lar expression [4mpattern[24m (see regex(3)) and an ed(1)-style 1041 [4mreplacement[24m. Normally, the first occurrence of the pattern [4mpattern[0m 1042 in each word of the value is substituted with [4mreplacement[24m. The `1' 1043 modifier causes the substitution to apply to at most one word; the 1044 `g' modifier causes the substitution to apply to as many instances 1045 of the search pattern [4mpattern[24m as occur in the word or words it is 1046 found in; the `W' modifier causes the value to be treated as a sin- 1047 gle word (possibly containing embedded whitespace). 1048 1049 As for the [1m:S [22mmodifier, the [4mpattern[24m and [4mreplacement[24m are subjected to 1050 variable expansion before being parsed as regular expressions. 1051 1052 [1m:T [22mReplaces each word with its last path component (basename). 1053 1054 [1m:u [22mRemoves adjacent duplicate words (like uniq(1)). 1055 1056 [1m:?[4m[22mtrue_string[24m[1m:[4m[22mfalse_string[0m 1057 If the variable name (not its value), when parsed as a [1m.if [22mcondi- 1058 tional expression, evaluates to true, return as its value the 1059 [4mtrue_string[24m, otherwise return the [4mfalse_string[24m. Since the variable 1060 name is used as the expression, :? must be the first modifier after 1061 the variable name itself--which, of course, usually contains vari- 1062 able expansions. A common error is trying to use expressions like 1063 ${NUMBERS:M42:?match:no} 1064 which actually tests defined(NUMBERS). To determine if any words 1065 match "42", you need to use something like: 1066 ${"${NUMBERS:M42}" != "":?match:no}. 1067 1068 [1m:[4m[22mold_string[24m[1m=[4m[22mnew_string[0m 1069 This is the AT&T System V UNIX style substitution. It can only be 1070 the last modifier specified, as a `:' in either [4mold_string[24m or 1071 [4mnew_string[24m is treated as a regular character, not as the end of the 1072 modifier. 1073 1074 If [4mold_string[24m does not contain the pattern matching character `%', 1075 and the word ends with [4mold_string[24m or equals it, that suffix is re- 1076 placed with [4mnew_string[24m. 1077 1078 Otherwise, the first `%' in [4mold_string[24m matches a possibly empty sub- 1079 string of arbitrary characters, and if the whole pattern is found in 1080 the word, the matching part is replaced with [4mnew_string[24m, and the 1081 first occurrence of `%' in [4mnew_string[24m (if any) is replaced with the 1082 substring matched by the `%'. 1083 1084 Both [4mold_string[24m and [4mnew_string[24m may contain nested expressions. To 1085 prevent a dollar sign from starting a nested expression, escape it 1086 with a backslash. 1087 1088 [1m:@[4m[22mvarname[24m[1m@[4m[22mstring[24m[1m@[0m 1089 This is the loop expansion mechanism from the OSF Development Envi- 1090 ronment (ODE) make. Unlike [1m.for [22mloops, expansion occurs at the time 1091 of reference. For each word in the value, assign the word to the 1092 variable named [4mvarname[24m and evaluate [4mstring[24m. The ODE convention is 1093 that [4mvarname[24m should start and end with a period, for example: 1094 ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 1095 1096 However, a single-letter variable is often more readable: 1097 ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 1098 1099 [1m:_[22m[[1m=[4m[22mvar[24m] 1100 Saves the current variable value in `$_' or the named [4mvar[24m for later 1101 reference. Example usage: 1102 1103 M_cmpv.units = 1 1000 1000000 1104 M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \ 1105 \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 1106 1107 .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}} 1108 1109 Here `$_' is used to save the result of the `:S' modifier which is 1110 later referenced using the index values from `:range'. 1111 1112 [1m:U[4m[22mnewval[0m 1113 If the variable is undefined, [4mnewval[24m is the value. If the variable 1114 is defined, the existing value is returned. This is another ODE 1115 make feature. It is handy for setting per-target CFLAGS for in- 1116 stance: 1117 ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 1118 If a value is only required if the variable is undefined, use: 1119 ${VAR:D:Unewval} 1120 1121 [1m:D[4m[22mnewval[0m 1122 If the variable is defined, [4mnewval[24m is the value. 1123 1124 [1m:L [22mThe name of the variable is the value. 1125 1126 [1m:P [22mThe path of the node which has the same name as the variable is the 1127 value. If no such node exists or its path is null, the name of the 1128 variable is used. In order for this modifier to work, the name 1129 (node) must at least have appeared on the right-hand side of a de- 1130 pendency. 1131 1132 [1m:![4m[22mcmd[24m[1m![0m 1133 The output of running [4mcmd[24m is the value. 1134 1135 [1m:sh [22mThe value is run as a command, and the output becomes the new value. 1136 1137 [1m::=[4m[22mstr[0m 1138 The variable is assigned the value [4mstr[24m after substitution. This 1139 modifier and its variations are useful in obscure situations such as 1140 wanting to set a variable at a point where a target's shell commands 1141 are being parsed. These assignment modifiers always expand to noth- 1142 ing. 1143 1144 The `[1m::[22m' helps avoid false matches with the AT&T System V UNIX style 1145 `:=' modifier and since substitution always occurs, the `::=' form 1146 is vaguely appropriate. 1147 1148 [1m::?=[4m[22mstr[0m 1149 As for [1m::= [22mbut only if the variable does not already have a value. 1150 1151 [1m::+=[4m[22mstr[0m 1152 Append [4mstr[24m to the variable. 1153 1154 [1m::!=[4m[22mcmd[0m 1155 Assign the output of [4mcmd[24m to the variable. 1156 1157 [1m:[[4m[22mrange[24m[1m][0m 1158 Selects one or more words from the value, or performs other opera- 1159 tions related to the way in which the value is split into words. 1160 1161 An empty value, or a value that consists entirely of white-space, is 1162 treated as a single word. For the purposes of the `[1m:[][22m' modifier, 1163 the words are indexed both forwards using positive integers (where 1164 index 1 represents the first word), and backwards using negative in- 1165 tegers (where index -1 represents the last word). 1166 1167 The [4mrange[24m is subjected to variable expansion, and the expanded re- 1168 sult is then interpreted as follows: 1169 1170 [4mindex[24m Selects a single word from the value. 1171 1172 [4mstart[24m[1m..[4m[22mend[0m 1173 Selects all words from [4mstart[24m to [4mend[24m, inclusive. For example, 1174 `[1m:[2..-1][22m' selects all words from the second word to the last 1175 word. If [4mstart[24m is greater than [4mend[24m, the words are output in 1176 reverse order. For example, `[1m:[-1..1][22m' selects all the words 1177 from last to first. If the list is already ordered, this ef- 1178 fectively reverses the list, but it is more efficient to use 1179 `[1m:Or[22m' instead of `[1m:O:[-1..1][22m'. 1180 1181 [1m* [22mCauses subsequent modifiers to treat the value as a single 1182 word (possibly containing embedded whitespace). Analogous to 1183 the effect of $* in Bourne shell. 1184 1185 0 Means the same as `[1m:[*][22m'. 1186 1187 [1m@ [22mCauses subsequent modifiers to treat the value as a sequence 1188 of words delimited by whitespace. Analogous to the effect of 1189 $@ in Bourne shell. 1190 1191 [1m# [22mReturns the number of words in the value. 1192 1193[1mDIRECTIVES[0m 1194 [1mbmake [22moffers directives for including makefiles, conditionals and for 1195 loops. All these directives are identified by a line beginning with a 1196 single dot (`.') character, followed by the keyword of the directive, 1197 such as [1minclude [22mor [1mif[22m. 1198 1199 [1mFile inclusion[0m 1200 Files are included with either [1m.include <[4m[22mfile[24m[1m> [22mor [1m.include "[4m[22mfile[24m[1m"[22m. Vari- 1201 ables between the angle brackets or double quotes are expanded to form 1202 the file name. If angle brackets are used, the included makefile is ex- 1203 pected to be in the system makefile directory. If double quotes are 1204 used, the including makefile's directory and any directories specified 1205 using the [1m-I [22moption are searched before the system makefile directory. 1206 1207 For compatibility with other make variants, `[1minclude [4m[22mfile[24m ...' (without 1208 leading dot) is also accepted. 1209 1210 If the include statement is written as [1m.-include [22mor as [1m.sinclude[22m, errors 1211 locating and/or opening include files are ignored. 1212 1213 If the include statement is written as [1m.dinclude[22m, not only are errors lo- 1214 cating and/or opening include files ignored, but stale dependencies 1215 within the included file are ignored just like in [4m.MAKE.DEPENDFILE[24m. 1216 1217 [1mExporting variables[0m 1218 The directives for exporting and unexporting variables are: 1219 1220 [1m.export [4m[22mvariable[24m ... 1221 Export the specified global variable. If no variable list is 1222 provided, all globals are exported except for internal variables 1223 (those that start with `.'). This is not affected by the [1m-X[0m 1224 flag, so should be used with caution. For compatibility with 1225 other make programs, [1mexport [4m[22mvariable[24m[1m=[4m[22mvalue[24m (without leading dot) 1226 is also accepted. 1227 1228 Appending a variable name to [4m.MAKE.EXPORTED[24m is equivalent to ex- 1229 porting a variable. 1230 1231 [1m.export-env [4m[22mvariable[24m ... 1232 The same as `.export', except that the variable is not appended 1233 to [4m.MAKE.EXPORTED[24m. This allows exporting a value to the environ- 1234 ment which is different from that used by [1mbmake [22minternally. 1235 1236 [1m.export-literal [4m[22mvariable[24m ... 1237 The same as `.export-env', except that variables in the value are 1238 not expanded. 1239 1240 [1m.unexport [4m[22mvariable[24m ... 1241 The opposite of `.export'. The specified global [4mvariable[24m is re- 1242 moved from [4m.MAKE.EXPORTED[24m. If no variable list is provided, all 1243 globals are unexported, and [4m.MAKE.EXPORTED[24m deleted. 1244 1245 [1m.unexport-env[0m 1246 Unexport all globals previously exported and clear the environ- 1247 ment inherited from the parent. This operation causes a memory 1248 leak of the original environment, so should be used sparingly. 1249 Testing for [4m.MAKE.LEVEL[24m being 0 would make sense. Also note that 1250 any variables which originated in the parent environment should 1251 be explicitly preserved if desired. For example: 1252 1253 .if ${.MAKE.LEVEL} == 0 1254 PATH := ${PATH} 1255 .unexport-env 1256 .export PATH 1257 .endif 1258 1259 Would result in an environment containing only `PATH', which is 1260 the minimal useful environment. Actually `[4m.MAKE.LEVEL[24m' is also 1261 pushed into the new environment. 1262 1263 [1mMessages[0m 1264 The directives for printing messages to the output are: 1265 1266 [1m.info [4m[22mmessage[0m 1267 The message is printed along with the name of the makefile and 1268 line number. 1269 1270 [1m.warning [4m[22mmessage[0m 1271 The message prefixed by `warning:' is printed along with the name 1272 of the makefile and line number. 1273 1274 [1m.error [4m[22mmessage[0m 1275 The message is printed along with the name of the makefile and 1276 line number, [1mbmake [22mexits immediately. 1277 1278 [1mConditionals[0m 1279 The directives for conditionals are: 1280 1281 [1m.if [22m[[1m![22m][4mexpression[24m [[4moperator[24m [4mexpression[24m ...] 1282 Test the value of an expression. 1283 1284 [1m.ifdef [22m[[1m![22m][4mvariable[24m [[4moperator[24m [4mvariable[24m ...] 1285 Test whether a variable is defined. 1286 1287 [1m.ifndef [22m[[1m![22m][4mvariable[24m [[4moperator[24m [4mvariable[24m ...] 1288 Test whether a variable is not defined. 1289 1290 [1m.ifmake [22m[[1m![22m][4mtarget[24m [[4moperator[24m [4mtarget[24m ...] 1291 Test the target being requested. 1292 1293 [1m.ifnmake [22m[[1m![22m][4mtarget[24m [[4moperator[24m [4mtarget[24m ...] 1294 Test the target being requested. 1295 1296 [1m.else [22mReverse the sense of the last conditional. 1297 1298 [1m.elif [22m[[1m![22m][4mexpression[24m [[4moperator[24m [4mexpression[24m ...] 1299 A combination of `[1m.else[22m' followed by `[1m.if[22m'. 1300 1301 [1m.elifdef [22m[[1m![22m][4mvariable[24m [[4moperator[24m [4mvariable[24m ...] 1302 A combination of `[1m.else[22m' followed by `[1m.ifdef[22m'. 1303 1304 [1m.elifndef [22m[[1m![22m][4mvariable[24m [[4moperator[24m [4mvariable[24m ...] 1305 A combination of `[1m.else[22m' followed by `[1m.ifndef[22m'. 1306 1307 [1m.elifmake [22m[[1m![22m][4mtarget[24m [[4moperator[24m [4mtarget[24m ...] 1308 A combination of `[1m.else[22m' followed by `[1m.ifmake[22m'. 1309 1310 [1m.elifnmake [22m[[1m![22m][4mtarget[24m [[4moperator[24m [4mtarget[24m ...] 1311 A combination of `[1m.else[22m' followed by `[1m.ifnmake[22m'. 1312 1313 [1m.endif [22mEnd the body of the conditional. 1314 1315 The [4moperator[24m may be any one of the following: 1316 1317 [1m|| [22mLogical OR. 1318 1319 [1m&& [22mLogical AND; of higher precedence than `[1m||[22m'. 1320 1321 [1mbmake [22monly evaluates a conditional as far as is necessary to determine 1322 its value. Parentheses can be used to override the operator precedence. 1323 The boolean operator `[1m![22m' may be used to logically negate an expression, 1324 typically a function call. It is of higher precedence than `[1m&&[22m'. 1325 1326 The value of [4mexpression[24m may be any of the following function call expres- 1327 sions: 1328 1329 [1mdefined[22m([4mvarname[24m) 1330 Evaluates to true if the variable [4mvarname[24m has been defined. 1331 1332 [1mmake[22m([4mtarget[24m) 1333 Evaluates to true if the target was specified as part of [1mbmake[22m's 1334 command line or was declared the default target (either implic- 1335 itly or explicitly, see [4m.MAIN[24m) before the line containing the 1336 conditional. 1337 1338 [1mempty[22m([4mvarname[24m[:[4mmodifiers[24m]) 1339 Evaluates to true if the expansion of the variable, after apply- 1340 ing the modifiers, results in an empty string. 1341 1342 [1mexists[22m([4mpathname[24m) 1343 Evaluates to true if the given pathname exists. If relative, the 1344 pathname is searched for on the system search path (see [4m.PATH[24m). 1345 1346 [1mtarget[22m([4mtarget[24m) 1347 Evaluates to true if the target has been defined. 1348 1349 [1mcommands[22m([4mtarget[24m) 1350 Evaluates to true if the target has been defined and has commands 1351 associated with it. 1352 1353 [4mExpression[24m may also be an arithmetic or string comparison. Variable ex- 1354 pansion is performed on both sides of the comparison. If both sides are 1355 numeric and neither is enclosed in quotes, the comparison is done numeri- 1356 cally, otherwise lexicographically. A string is interpreted as a hexa- 1357 decimal integer if it is preceded by 0x, otherwise it is interpreted as a 1358 decimal floating-point number; octal numbers are not supported. 1359 1360 All comparisons may use the operators `[1m==[22m' and `[1m!=[22m'. Numeric comparisons 1361 may also use the operators `[1m<[22m', `[1m<=[22m', `[1m>[22m' and `[1m>=[22m'. 1362 1363 If the comparison has neither a comparison operator nor a right side, the 1364 expression evaluates to true if it is nonempty and its numeric value (if 1365 any) is not zero. 1366 1367 When [1mbmake [22mis evaluating one of these conditional expressions, and it en- 1368 counters a (whitespace-separated) word it doesn't recognize, either the 1369 "make" or "defined" function is applied to it, depending on the form of 1370 the conditional. If the form is `[1m.ifdef[22m', `[1m.ifndef[22m' or `[1m.if[22m', the 1371 "defined" function is applied. Similarly, if the form is `[1m.ifmake[22m' or 1372 `[1m.ifnmake[22m', the "make" function is applied. 1373 1374 If the conditional evaluates to true, parsing of the makefile continues 1375 as before. If it evaluates to false, the following lines until the cor- 1376 responding `[1m.elif[22m' variant, `[1m.else[22m' or `[1m.endif[22m' are skipped. 1377 1378 [1mFor loops[0m 1379 For loops are typically used to apply a set of rules to a list of files. 1380 The syntax of a for loop is: 1381 1382 [1m.for [4m[22mvariable[24m [[4mvariable[24m ...] [1min [4m[22mexpression[0m 1383 <[4mmake-lines[24m> 1384 [1m.endfor[0m 1385 1386 The [4mexpression[24m is expanded and then split into words. On each iteration 1387 of the loop, one word is taken and assigned to each [4mvariable[24m, in order, 1388 and these [4mvariables[24m are substituted into the [4mmake-lines[24m inside the body 1389 of the for loop. The number of words must come out even; that is, if 1390 there are three iteration variables, the number of words provided must be 1391 a multiple of three. 1392 1393 If `[1m.break[22m' is encountered within a [1m.for [22mloop, it causes early termina- 1394 tion of the loop, otherwise a parse error. 1395 1396 [1mOther directives[0m 1397 [1m.undef [4m[22mvariable[24m ... 1398 Un-define the specified global variables. Only global variables 1399 can be un-defined. 1400 1401[1mCOMMENTS[0m 1402 Comments begin with a hash (`#') character, anywhere but in a shell com- 1403 mand line, and continue to the end of an unescaped new line. 1404 1405[1mSPECIAL SOURCES (ATTRIBUTES)[0m 1406 [1m.EXEC [22mTarget is never out of date, but always execute commands any- 1407 way. 1408 1409 [1m.IGNORE [22mIgnore any errors from the commands associated with this tar- 1410 get, exactly as if they all were preceded by a dash (`-'). 1411 1412 [1m.MADE [22mMark all sources of this target as being up to date. 1413 1414 [1m.MAKE [22mExecute the commands associated with this target even if the [1m-n[0m 1415 or [1m-t [22moptions were specified. Normally used to mark recursive 1416 [1mbmake[22ms. 1417 1418 [1m.META [22mCreate a meta file for the target, even if it is flagged as 1419 [1m.PHONY[22m, [1m.MAKE[22m, or [1m.SPECIAL[22m. Usage in conjunction with [1m.MAKE [22mis 1420 the most likely case. In "meta" mode, the target is out-of- 1421 date if the meta file is missing. 1422 1423 [1m.NOMETA [22mDo not create a meta file for the target. Meta files are also 1424 not created for [1m.PHONY[22m, [1m.MAKE[22m, or [1m.SPECIAL [22mtargets. 1425 1426 [1m.NOMETA_CMP[0m 1427 Ignore differences in commands when deciding if target is out 1428 of date. This is useful if the command contains a value which 1429 always changes. If the number of commands change, though, the 1430 target is still considered out of date. The same effect ap- 1431 plies to any command line that uses the variable [4m.OODATE[24m, which 1432 can be used for that purpose even when not otherwise needed or 1433 desired: 1434 1435 1436 skip-compare-for-some: 1437 @echo this is compared 1438 @echo this is not ${.OODATE:M.NOMETA_CMP} 1439 @echo this is also compared 1440 1441 The [1m:M [22mpattern suppresses any expansion of the unwanted vari- 1442 able. 1443 1444 [1m.NOPATH [22mDo not search for the target in the directories specified by 1445 [4m.PATH[24m. 1446 1447 [1m.NOTMAIN [22mNormally [1mbmake [22mselects the first target it encounters as the 1448 default target to be built if no target was specified. This 1449 source prevents this target from being selected. 1450 1451 [1m.OPTIONAL[0m 1452 If a target is marked with this attribute and [1mbmake [22mcan't fig- 1453 ure out how to create it, it ignores this fact and assumes the 1454 file isn't needed or already exists. 1455 1456 [1m.PHONY [22mThe target does not correspond to an actual file; it is always 1457 considered to be out of date, and is not created with the [1m-t[0m 1458 option. Suffix-transformation rules are not applied to [1m.PHONY[0m 1459 targets. 1460 1461 [1m.PRECIOUS[0m 1462 When [1mbmake [22mis interrupted, it normally removes any partially 1463 made targets. This source prevents the target from being re- 1464 moved. 1465 1466 [1m.RECURSIVE[0m 1467 Synonym for [1m.MAKE[22m. 1468 1469 [1m.SILENT [22mDo not echo any of the commands associated with this target, 1470 exactly as if they all were preceded by an at sign (`@'). 1471 1472 [1m.USE [22mTurn the target into [1mbmake[22m's version of a macro. When the tar- 1473 get is used as a source for another target, the other target 1474 acquires the commands, sources, and attributes (except for 1475 [1m.USE[22m) of the source. If the target already has commands, the 1476 [1m.USE [22mtarget's commands are appended to them. 1477 1478 [1m.USEBEFORE[0m 1479 Like [1m.USE[22m, but instead of appending, prepend the [1m.USEBEFORE[0m 1480 target commands to the target. 1481 1482 [1m.WAIT [22mIf [1m.WAIT [22mappears in a dependency line, the sources that precede 1483 it are made before the sources that succeed it in the line. 1484 Since the dependents of files are not made until the file it- 1485 self could be made, this also stops the dependents being built 1486 unless they are needed for another branch of the dependency 1487 tree. So given: 1488 1489 x: a .WAIT b 1490 echo x 1491 a: 1492 echo a 1493 b: b1 1494 echo b 1495 b1: 1496 echo b1 1497 1498 the output is always `a', `b1', `b', `x'. 1499 1500 The ordering imposed by [1m.WAIT [22mis only relevant for parallel 1501 makes. 1502 1503[1mSPECIAL TARGETS[0m 1504 Special targets may not be included with other targets, i.e. they must be 1505 the only target specified. 1506 1507 [1m.BEGIN [22mAny command lines attached to this target are executed before 1508 anything else is done. 1509 1510 [1m.DEFAULT[0m 1511 This is sort of a [1m.USE [22mrule for any target (that was used only 1512 as a source) that [1mbmake [22mcan't figure out any other way to cre- 1513 ate. Only the shell script is used. The [4m.IMPSRC[24m variable of a 1514 target that inherits [1m.DEFAULT[22m's commands is set to the target's 1515 own name. 1516 1517 [1m.DELETE_ON_ERROR[0m 1518 If this target is present in the makefile, it globally causes 1519 make to delete targets whose commands fail. (By default, only 1520 targets whose commands are interrupted during execution are 1521 deleted. This is the historical behavior.) This setting can be 1522 used to help prevent half-finished or malformed targets from be- 1523 ing left around and corrupting future rebuilds. 1524 1525 [1m.END [22mAny command lines attached to this target are executed after ev- 1526 erything else is done successfully. 1527 1528 [1m.ERROR [22mAny command lines attached to this target are executed when an- 1529 other target fails. The [4m.ERROR_TARGET[24m variable is set to the 1530 target that failed. See also [4mMAKE_PRINT_VAR_ON_ERROR[24m. 1531 1532 [1m.IGNORE [22mMark each of the sources with the [1m.IGNORE [22mattribute. If no 1533 sources are specified, this is the equivalent of specifying the 1534 [1m-i [22moption. 1535 1536 [1m.INTERRUPT[0m 1537 If [1mbmake [22mis interrupted, the commands for this target are exe- 1538 cuted. 1539 1540 [1m.MAIN [22mIf no target is specified when [1mbmake [22mis invoked, this target is 1541 built. 1542 1543 [1m.MAKEFLAGS[0m 1544 This target provides a way to specify flags for [1mbmake [22mat the 1545 time when the makefiles are read. The flags are as if typed to 1546 the shell, though the [1m-f [22moption has no effect. 1547 1548 [1m.NOPATH [22mApply the [1m.NOPATH [22mattribute to any specified sources. 1549 1550 [1m.NOTPARALLEL[0m 1551 Disable parallel mode. 1552 1553 [1m.NO_PARALLEL[0m 1554 Synonym for [1m.NOTPARALLEL[22m, for compatibility with other pmake 1555 variants. 1556 1557 [1m.NOREADONLY[0m 1558 clear the read-only attribute from the global variables speci- 1559 fied as sources. 1560 1561 [1m.OBJDIR [22mThe source is a new value for `[4m.OBJDIR[24m'. If it exists, [1mbmake[0m 1562 changes the current working directory to it and updates the 1563 value of `[4m.OBJDIR[24m'. 1564 1565 [1m.ORDER [22mIn parallel mode, the named targets are made in sequence. This 1566 ordering does not add targets to the list of targets to be made. 1567 1568 Since the dependents of a target do not get built until the tar- 1569 get itself could be built, unless `a' is built by another part 1570 of the dependency graph, the following is a dependency loop: 1571 1572 .ORDER: b a 1573 b: a 1574 1575 [1m.PATH [22mThe sources are directories which are to be searched for files 1576 not found in the current directory. If no sources are speci- 1577 fied, any previously specified directories are removed from the 1578 search path. If the source is the special [1m.DOTLAST [22mtarget, the 1579 current working directory is searched last. 1580 1581 [1m.PATH.[4m[22msuffix[0m 1582 Like [1m.PATH [22mbut applies only to files with a particular suffix. 1583 The suffix must have been previously declared with [1m.SUFFIXES[22m. 1584 1585 [1m.PHONY [22mApply the [1m.PHONY [22mattribute to any specified sources. 1586 1587 [1m.POSIX [22mIf this is the first non-comment line in the main makefile, the 1588 variable [4m%POSIX[24m is set to the value `1003.2' and the makefile 1589 `<posix.mk>' is included if it exists, to provide POSIX-compati- 1590 ble default rules. If [1mbmake [22mis run with the [1m-r [22mflag, only 1591 `posix.mk' contributes to the default rules. 1592 1593 [1m.PRECIOUS[0m 1594 Apply the [1m.PRECIOUS [22mattribute to any specified sources. If no 1595 sources are specified, the [1m.PRECIOUS [22mattribute is applied to ev- 1596 ery target in the file. 1597 1598 [1m.READONLY[0m 1599 set the read-only attribute on the global variables specified as 1600 sources. 1601 1602 [1m.SHELL [22mSets the shell that [1mbmake [22muses to execute commands in jobs mode. 1603 The sources are a set of [4mfield[24m[1m=[4m[22mvalue[24m pairs. 1604 1605 name This is the minimal specification, used to select 1606 one of the built-in shell specs; sh, ksh, and csh. 1607 1608 path Specifies the absolute path to the shell. 1609 1610 hasErrCtl Indicates whether the shell supports exit on error. 1611 1612 check The command to turn on error checking. 1613 1614 ignore The command to disable error checking. 1615 1616 echo The command to turn on echoing of commands executed. 1617 1618 quiet The command to turn off echoing of commands exe- 1619 cuted. 1620 1621 filter The output to filter after issuing the quiet com- 1622 mand. It is typically identical to quiet. 1623 1624 errFlag The flag to pass the shell to enable error checking. 1625 1626 echoFlag The flag to pass the shell to enable command echo- 1627 ing. 1628 1629 newline The string literal to pass the shell that results in 1630 a single newline character when used outside of any 1631 quoting characters. 1632 Example: 1633 1634 .SHELL: name=ksh path=/bin/ksh hasErrCtl=true \ 1635 check="set -e" ignore="set +e" \ 1636 echo="set -v" quiet="set +v" filter="set +v" \ 1637 echoFlag=v errFlag=e newline="'\n'" 1638 1639 [1m.SILENT [22mApply the [1m.SILENT [22mattribute to any specified sources. If no 1640 sources are specified, the [1m.SILENT [22mattribute is applied to every 1641 command in the file. 1642 1643 [1m.STALE [22mThis target gets run when a dependency file contains stale en- 1644 tries, having [4m.ALLSRC[24m set to the name of that dependency file. 1645 1646 [1m.SUFFIXES[0m 1647 Each source specifies a suffix to [1mbmake[22m. If no sources are 1648 specified, any previously specified suffixes are deleted. It 1649 allows the creation of suffix-transformation rules. 1650 1651 Example: 1652 1653 .SUFFIXES: .c .o 1654 .c.o: 1655 cc -o ${.TARGET} -c ${.IMPSRC} 1656 1657 [1m.SYSPATH[0m 1658 The sources are directories which are to be added to the system 1659 include path which [1mbmake [22msearches for makefiles. If no sources 1660 are specified, any previously specified directories are removed 1661 from the system include path. 1662 1663[1mENVIRONMENT[0m 1664 [1mbmake [22muses the following environment variables, if they exist: MACHINE, 1665 MACHINE_ARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, 1666 PWD, and TMPDIR. 1667 1668 MAKEOBJDIRPREFIX and MAKEOBJDIR may only be set in the environment or on 1669 the command line to [1mbmake [22mand not as makefile variables; see the descrip- 1670 tion of `[4m.OBJDIR[24m' for more details. 1671 1672[1mFILES[0m 1673 .depend list of dependencies 1674 makefile first default makefile if no makefile is specified on the 1675 command line 1676 Makefile second default makefile if no makefile is specified on the 1677 command line 1678 sys.mk system makefile 1679 /usr/share/mk system makefile directory 1680 1681[1mCOMPATIBILITY[0m 1682 The basic make syntax is compatible between different make variants; how- 1683 ever the special variables, variable modifiers and conditionals are not. 1684 1685 [1mOlder versions[0m 1686 An incomplete list of changes in older versions of [1mbmake[22m: 1687 1688 The way that .for loop variables are substituted changed after NetBSD 5.0 1689 so that they still appear to be variable expansions. In particular this 1690 stops them being treated as syntax, and removes some obscure problems us- 1691 ing them in .if statements. 1692 1693 The way that parallel makes are scheduled changed in NetBSD 4.0 so that 1694 .ORDER and .WAIT apply recursively to the dependent nodes. The algo- 1695 rithms used may change again in the future. 1696 1697 [1mOther make dialects[0m 1698 Other make dialects (GNU make, SVR4 make, POSIX make, etc.) do not sup- 1699 port most of the features of [1mbmake [22mas described in this manual. Most no- 1700 tably: 1701 1702 [1m+o [22mThe [1m.WAIT [22mand [1m.ORDER [22mdeclarations and most functionality per- 1703 taining to parallelization. (GNU make supports parallelization 1704 but lacks the features needed to control it effectively.) 1705 1706 [1m+o [22mDirectives, including for loops and conditionals and most of 1707 the forms of include files. (GNU make has its own incompatible 1708 and less powerful syntax for conditionals.) 1709 1710 [1m+o [22mAll built-in variables that begin with a dot. 1711 1712 [1m+o [22mMost of the special sources and targets that begin with a dot, 1713 with the notable exception of [1m.PHONY[22m, [1m.PRECIOUS[22m, and [1m.SUFFIXES[22m. 1714 1715 [1m+o [22mVariable modifiers, except for the `:old=new' string substitu- 1716 tion, which does not portably support globbing with `%' and 1717 historically only works on declared suffixes. 1718 1719 [1m+o [22mThe [1m$> [22mvariable even in its short form; most makes support this 1720 functionality but its name varies. 1721 1722 Some features are somewhat more portable, such as assignment with [1m+=[22m, [1m?=[22m, 1723 and [1m!=[22m. The [4m.PATH[24m functionality is based on an older feature [1mVPATH [22mfound 1724 in GNU make and many versions of SVR4 make; however, historically its be- 1725 havior is too ill-defined (and too buggy) to rely upon. 1726 1727 The [1m$@ [22mand [1m$< [22mvariables are more or less universally portable, as is the 1728 [1m$(MAKE) [22mvariable. Basic use of suffix rules (for files only in the cur- 1729 rent directory, not trying to chain transformations together, etc.) is 1730 also reasonably portable. 1731 1732[1mSEE ALSO[0m 1733 mkdep(1) 1734 1735[1mHISTORY[0m 1736 [1mbmake [22mis derived from NetBSD make(1). It uses autoconf to facilitate 1737 portability to other platforms. 1738 1739 A make command appeared in Version 7 AT&T UNIX. This make implementation 1740 is based on Adam de Boor's pmake program, which was written for Sprite at 1741 Berkeley. It was designed to be a parallel distributed make running jobs 1742 on different machines using a daemon called "customs". 1743 1744 Historically the target/dependency [1mFRC [22mhas been used to FoRCe rebuilding 1745 (since the target/dependency does not exist ... unless someone creates an 1746 [4mFRC[24m file). 1747 1748[1mBUGS[0m 1749 The make syntax is difficult to parse. For instance, finding the end of 1750 a variable's use should involve scanning each of the modifiers, using the 1751 correct terminator for each field. In many places make just counts {} 1752 and () in order to find the end of a variable expansion. 1753 1754 There is no way of escaping a space character in a filename. 1755 1756 In jobs mode, when a target fails; make will put an error token into the 1757 job token pool. This will cause all other instances of make using that 1758 token pool to abort the build and exit with error code 6. Sometimes the 1759 attempt to suppress a cascade of unnecessary errors, can result in a 1760 seemingly unexplained `*** Error code 6' 1761 1762FreeBSD 13.0 September 9, 2023 FreeBSD 13.0 1763