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