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