|
|
1.1 root 1: .\" Copyright (c) 1990 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted provided
5: .\" that: (1) source distributions retain this entire copyright notice and
6: .\" comment, and (2) distributions including binaries display the following
7: .\" acknowledgement: ``This product includes software developed by the
8: .\" University of California, Berkeley and its contributors'' in the
9: .\" documentation or other materials provided with the distribution and in
10: .\" all advertising materials mentioning features or use of this software.
11: .\" Neither the name of the University nor the names of its contributors may
12: .\" be used to endorse or promote products derived from this software without
13: .\" specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)make.1 5.3 (Berkeley) 7/24/90
19: .\"
20: .Dd July 24, 1990
21: .Dt MAKE 1
22: .Os BSD 4.4
23: .Sh NAME
24: .Nm make
25: .Nd maintain program dependencies
26: .Sh SYNOPSIS
27: .Nm make
28: .Op Fl eiknqrstv
29: .Op Fl D Ar variable
30: .Op Fl d Ar flags
31: .Op Fl f Ar makefile
32: .Op Fl I Ar directory
33: .Op Fl j Ar max_jobs
34: .Op Ar variable=value
35: .Op Ar target ...
36: .Sh DESCRIPTION
37: .Nm Make
38: is a program designed to simplify the maintenance of other programs.
39: Its input is a ``makefile'' which specifies files that programs and
40: other files are dependent upon.
41: .Pp
42: This manual page is intended as a reference document only.
43: For a more thorough description of
44: .Nm make
45: and makefiles, please refer to
46: .Em Make \-\- A Tutorial .
47: .Pp
48: The options are as follows:
49: .Tw Ds
50: .Tp Cx Fl
51: .Ar variable
52: .Cx
53: Define
54: .Ar variable
55: to be 1, in the global context.
56: .Tp Cx Fl d
57: .Ar flags
58: .Cx
59: Turn on debugging, and specify which portions of
60: .Nm make
61: are to print debugging information.
62: .Ar Flags
63: is one or more of the following:
64: .Tw Ds
65: .Tp Ic A
66: Print all possible debugging information; equivalent to specifying
67: all of the debugging flags.
68: .Tp Ic a
69: Print debugging information about archive searching and caching.
70: .Tp Ic c
71: Print debugging information about conditional evaluation.
72: .Tp Ic d
73: Print debugging information about directory searching and caching.
74: .Tp Ic g1
75: Print the input graph before making anything.
76: .Tp Ic g2
77: Print the input graph after making everything, or before exiting
78: on error.
79: .Tp Ic j
80: Print debugging information about running multiple shells.
81: .Tp Ic m
82: Print debugging information about making targets, including modification
83: dates.
84: .Tp Ic s
85: Print debugging information about suffix-transformation rules.
86: .Tp Ic t
87: Print debugging information about target list maintenance.
88: .Tp Ic v
89: Print debugging information about variable assignment.
90: .Tp
91: .Tp Cx Fl f
92: .Ar makefile
93: .Cx
94: Specify a makefile to read.
95: If no makefile is specified, the files ``makefile'' and ``Makefile''
96: are searched for, in that order.
97: If
98: .Ar makefile
99: is ``\-'', standard input is read.
100: Multiple makefile's may be specified, and are read in the order specified.
101: .Tp Cx Fl I
102: .Ar directory
103: .Cx
104: Specify a directory in which to search for makefiles and included makefiles.
105: The system makefile directory is automatically included as part of this
106: list.
107: .Tp Fl i
108: Ignore non-zero exit of shell commands in the makefile.
109: Equivalent to specifying ``\-'' before each command line in the makefile.
110: .Tp Cx Fl j
111: .Ar max_jobs
112: .Cx
113: Specify the maximum number of jobs that
114: .Nm make
115: may have running at any one time.
116: .Tp Fl k
117: Continue processing after errors are encountered, but only on those targets
118: that do not depend on the target whose creation caused the error.
119: .Tp Fl n
120: Display the commands that would have been executed, but do not actually
121: execute them.
122: .Tp Fl q
123: Do not execute any commands, but exit 0 if the specified targets are
124: up-to-date and 1, otherwise.
125: .Tp Fl r
126: Do not use the built-in rules specified in the system makefile.
127: .Tp Fl s
128: Do not echo any commands as they are executed.
129: Equivalent to specifying ``@'' before each command line in the makefile.
130: .Tp Fl t
131: Rather than re-building a target as specified in the makefile, create it
132: or update its modification time to make it appear up-to-date.
133: .Tp Ar variable=value
134: Set the value of the variable
135: .Ar variable
136: to
137: .Ar value .
138: .Tp
139: .Pp
140: There are six different types of lines in a makefile: file dependency
141: specifications, shell commands, variable assignments, include statements,
142: conditional directives, and comments.
143: .Pp
144: In general, lines may be continued from one line to the next by ending
145: them with a backslash (``\e'').
146: The trailing newline character and initial whitespace on the following
147: line are compressed into a single space.
148: .Sh FILE DEPENDENCY SPECIFICATIONS
149: Dependency lines consist of one or more targets, an operator, and zero
150: or more sources.
151: This creates a relationship where the targets ``depend'' on the sources
152: and are usually created from them.
153: The exact relationship between the target and the source is determined
154: by the operator that separates them.
155: The three operators are as follows:
156: .Tw Ds
157: .Tp Ic \&:
158: A target is considered out-of-date if its modification time is less than
159: those of any of its sources.
160: Sources for a target accumulate over dependency lines when this operator
161: is used.
162: The target is removed if
163: .Nm make
164: is interrupted.
165: .Tp Ic \&!
166: Targets are always re-created, but not until all sources have been
167: examined and re-created as necessary.
168: Sources for a target accumulate over dependency lines when this operator
169: is used.
170: The target is removed if
171: .Nm make
172: is interrupted.
173: .Tp Ic \&::
174: If no sources are specified, the target is always re-created.
175: Otherwise, a target is considered out-of-date if any of its sources has
176: been modified more recently than the target.
177: Sources for a target do not accumulate over dependency lines when this
178: operator is used.
179: The target will not be removed if
180: .Nm make
181: is interrupted.
182: .Tp
183: .Pp
184: Targets and sources may contain the shell wildcard values ``?'', ``*'',
185: .Dq Op
186: and ``{}''.
187: The values ``?'', ``*'' and
188: .Dq Op
189: may only be used as part of the final
190: component of the target or source, and must be used to describe existing
191: files.
192: The value ``{}'' need not necessarily be used to describe existing files.
193: Expansion is in directory order, not alphabetically as done in the shell.
194: .Sh SHELL COMMANDS
195: Each target may have associated with it a series of shell commands, normally
196: used to create the target.
197: Each of the commands in this script
198: .Em must
199: be preceded by a tab.
200: While any target may appear on a dependency line, only one of these
201: dependencies may be followed by a creation script, unless the ``::''
202: operator is used.
203: .Pp
204: If the first or first two characters of the command line are ``@'' and/or
205: ``\-'', the command is treated specially.
206: A ``@'' causes the command not to be echoed before it is executed.
207: A ``\-'' causes any non-zero exit status of the command line to be ignored.
208: .Sh VARIABLE ASSIGNMENTS
209: Variables in make are much like variables in the shell, and, by tradition,
210: consist of all upper-case letters.
211: The five operators that can be used to assign values to variables are as
212: follows:
213: .Tw Ds
214: .Tp Ic \&=
215: Assign the value to the variable.
216: Any previous value is overridden.
217: .Tp Ic \&+=
218: Append the value to the current value of the variable.
219: .Tp Ic \&?=
220: Assign the value to the variable if it is not already defined.
221: .Tp Ic \&:=
222: Assign with expansion, i.e. expand the value before assigning it
223: to the variable.
224: Normally, expansion is not done until the variable is referenced.
225: .Tp Ic \&!=
226: Expand the value and pass it to the shell for execution and assign
227: the result to the variable.
228: Any newlines in the result are replaced with spaces.
229: .Tp
230: .Pp
231: Any white-space before the assigned
232: .Ar value
233: is removed; if the value is being appended, a single space is inserted
234: between the previous contents of the variable and the appended value.
235: .Pp
236: Variables are expanded by surrounding the variable name with either
237: curly braces (``{}'') or parenthesis (``()'') and preceding it with
238: a dollar sign (``$'').
239: If the variable name contains only a single letter, the surrounding
240: braces or parenthesis are not required.
241: This shorter form is not recommended.
242: .Pp
243: Variable substitution occurs at two distinct times, depending on where
244: the variable is being used.
245: Variables in dependency lines are expanded as the line is read.
246: Variables in shell commands are expanded when the shell command is
247: executed.
248: .Pp
249: The four different classes of variables (in order of increasing precedence)
250: are:
251: .Tw Ds
252: .Tp environment variables
253: Variables defined as part of
254: .Cx Nm make
255: .Cx \'s
256: .Cx
257: environment.
258: .Tp global variables
259: Variables defined in the makefile or in included makefiles.
260: .Tp command line variables
261: Variables defined as part of the command line.
262: .Tp local variables
263: Variables that are defined specific to a certain target.
264: The seven local variables are as follows:
265: .Tw Ds
266: .Tp Va \&.ALLSRC
267: The list of all sources for this target; also known as ``>''.
268: .Tp Va \&.ARCHIVE
269: The name of the archive file.
270: .Tp Va \&.IMPSRC
271: The name/path of the source from which the target is to be transformed
272: (the ``implied'' source); also known as ``<''.
273: .Tp Va \&.MEMBER
274: The name of the archive member.
275: .Tp Va \&.OODATE
276: The list of sources for this target that were deemed out-of-date; also
277: known as ``?''.
278: .Tp Va \&.PREFIX
279: The file prefix of the file, containing only the file portion, no suffix
280: or preceding directory components; also known as ``*'.
281: .Tp Va \&.TARGET
282: The name of the target; also known as ``@''.
283: .Tp
284: .Pp
285: The shorter forms ``@'', ``?'', ``>'' and ``*'' are permitted for backward
286: compatibility with historical makefiles and are not recommended.
287: The six variables ``@F'', ``@D'', ``<F'', ``<D'', ``*F'' and ``*D'' are
288: permitted for compatibility with System V makefiles and are not recommended.
289: .Pp
290: Four of the local variables may be used in sources on dependency lines
291: because they expand to the proper value for each target on the line.
292: These variables are ``.TARGET'', ``.PREFIX'', ``.ARCHIVE'', and ``.MEMBER''.
293: .Pp
294: In addition,
295: .Nm make
296: sets or knows about the following variables:
297: .Tw MAKEFLAGS
298: .Tp Va \&$
299: A single dollar sign (``$''), i.e. ``$$'' expands to a single dollar
300: sign.
301: .Tp Va \&.MAKE
302: The name that
303: .Nm make
304: was executed with
305: .Pq Cx Va argv
306: .Op 0
307: .Cx
308: .Tp Va \&.CURDIR
309: A path to the directory where
310: .Nm make
311: was executed.
312: .Tp Va MAKEFLAGS
313: The environment variable ``MAKEFLAGS'' may contain anything that
314: may be specified on
315: .Cx Nm make
316: .Cx \'s
317: .Cx
318: command line.
319: Anything specified on
320: .Cx Nm make
321: .Cx \'s
322: .Cx
323: command line is appended to the ``MAKEFLAGS'' variable which is then
324: entered into the environment for all programs which
325: .Nm make
326: executes.
327: .Tp
328: .Pp
329: Variable expansion may be modified to select or modify each word of the
330: variable (where a ``word'' is white-space delimited sequence of characters).
331: The general format of a variable expansion is as follows:
332: .Pp
333: .Dl {variable[:modifier[:...]]}
334: .Pp
335: Each modifier begins with a colon and one of the following
336: special characters.
337: The colon may be escaped with a backslash (``\e'').
338: .Tp Cm E\&
339: Replaces each word in the variable with its suffix.
340: .Tp Cm \&H
341: Replaces each word in the variable with everything but the last component.
342: .Tp Cx Ic M
343: .Ar pattern
344: .Cx
345: Select only those words that match the rest of the modifier.
346: The standard shell wildcard characters (``*'', ``?'', and
347: .Dq Op )
348: may
349: be used.
350: The wildcard characters may be escaped with a backslash (``\e'').
351: .Tp Cx Ic N
352: .Ar pattern
353: .Cx
354: This is identical to ``M'', but selects all words which do not match
355: the rest of the modifier.
356: .Tp Cm R
357: Replaces each word in the variable with everything but its suffix.
358: .Tp Cx Cm S
359: .Cx \&/
360: .Ar old_pattern
361: .Cx \&/
362: .Ar new_pattern
363: .Cx \&/
364: .Op Cm g
365: .Cx
366: Modify the first occurrence of
367: .Ar old_pattern
368: in each word to be replaced with
369: .Ar new_pattern .
370: If a ``g'' is appended to the last slash of the pattern, all occurrences
371: in each word are replaced.
372: If
373: .Ar old_pattern
374: begins with a carat (``^''),
375: .Ar old_pattern
376: is anchored at the beginning of each word.
377: If
378: .Ar old_pattern
379: ends with a dollar sign (``$''), it is anchored at the end of each word.
380: Inside
381: .Ar new_string ,
382: an ampersand (``&'') is replaced by
383: .Ar old_pattern .
384: Any character may be used as a delimiter for the parts of the modifier
385: string.
386: The anchoring, ampersand and delimiter characters may be escaped with a
387: backslash (``\e'').
388: .Pp
389: Variable expansion occurs in the normal fashion inside both
390: .Ar old_string
391: and
392: .Ar new_string
393: with the single exception that a backslash is used to prevent the expansion
394: of a dollar sign (``$''), not a preceding dollar sign as is usual.
395: .Tp Cm T
396: Replaces each word in the variable with its last component.
397: .Tp Ar old_string=new_string
398: This is the System V style variable substitution.
399: It must be the last modifier specified.
400: .Ar Old_string
401: is anchored at the end of each word, so only suffixes or entire
402: words may be replaced.
403: .Tp
404: .Sh INCLUDE STATEMENTS AND CONDITIONALS
405: Makefile inclusion and conditional structures reminiscent of the C
406: programming language are provided in
407: .Nm make .
408: All such structures are identified by a line beginning with a single
409: dot (``.'') character.
410: Files are included with either ``.include <file>'' or ``.include "file"''.
411: Variables between the angle brackets or double quotes are expanded
412: to form the file name.
413: If angle brackets are used, the included makefile is expected to be in
414: the system makefile directory.
415: If double quotes are used, the including makefile's directory and any
416: directories specified using the
417: .Fl I
418: option are searched before the system
419: makefile directory.
420: .Pp
421: Conditional expressions are also preceded by a single dot as the first
422: chraracter of a line.
423: The possible conditionals are as follows:
424: .Tw Ds
425: .Tp Cx Ic \&.undef
426: .Cx \&\ \&
427: .Ar variable
428: .Cx
429: Un-define the specified global variable.
430: Only global variables may be un-defined.
431: .Tp Cx Ic \&.if
432: .Cx \&\ \&
433: .Op \&!
434: .Cx \&\ \&
435: .Ar expression
436: .Cx \&\ \&
437: .Op Ar operator expression ...
438: .Cx
439: Test the value of an expression.
440: .Tp Cx Ic \&.ifdef
441: .Cx \&\ \&
442: .Op \&!
443: .Ar variable
444: .Cx \&\ \&
445: .Op Ar operator variable ...
446: .Cx
447: Test the value of an variable.
448: .Tp Cx Ic \&.ifndef
449: .Cx \&\ \&
450: .Op \&!
451: .Cx \&\ \&
452: .Ar variable
453: .Cx \&\ \&
454: .Op Ar operator variable ...
455: .Cx
456: Test the value of an variable.
457: .Tp Cx Ic \&.ifmake
458: .Cx \&\ \&
459: .Op \&!
460: .Cx \&\ \&
461: .Ar target
462: .Cx \&\ \&
463: .Op Ar operator target ...
464: .Cx
465: Test the the target being built.
466: .Tp Cx Ic \&.ifnmake
467: .Cx \&\ \&
468: .Op \&!
469: .Ar target
470: .Cx \&\ \&
471: .Op Ar operator target ...
472: .Cx
473: Test the target being built.
474: .Tp Ic \&.else
475: Reverse the sense of the last conditional.
476: .Tp Cx Ic \&.elif
477: .Cx \&\ \&
478: .Op \&!
479: .Cx \&\ \&
480: .Ar expression
481: .Cx \&\ \&
482: .Op Ar operator expression ...
483: .Cx
484: A combination of ``.else'' followed by ``.if''.
485: .Tp Cx Ic \&.elifdef
486: .Cx \&\ \&
487: .Op \&!
488: .Cx \&\ \&
489: .Ar variable
490: .Cx \&\ \&
491: .Op Ar operator variable ...
492: .Cx
493: A combination of ``.else'' followed by ``.ifdef''.
494: .Tp Cx Ic \&.elifndef
495: .Cx \&\ \&
496: .Op \&!
497: .Cx \&\ \&
498: .Ar variable
499: .Cx \&\ \&
500: .Op Ar operator variable ...
501: .Cx
502: A combination of ``.else'' followed by ``.ifndef''.
503: .Tp Cx Ic \&.elifmake
504: .Cx \&\ \&
505: .Op \&!
506: .Cx \&\ \&
507: .Ar target
508: .Cx \&\ \&
509: .Op Ar operator target ...
510: .Cx
511: A combination of ``.else'' followed by ``.ifmake''.
512: .Tp Cx Ic \&.elifnmake
513: .Cx \&\ \&
514: .Op \&!
515: .Cx \&\ \&
516: .Ar target
517: .Cx \&\ \&
518: .Op Ar operator target ...
519: .Cx
520: A combination of ``.else'' followed by ``.ifnmake''.
521: .Tp Ic \&.endif
522: End the body of the conditional.
523: .Tp
524: .Pp
525: The
526: .Ar operator
527: may be any one of the following:
528: .Tp Cm \&|\&|
529: logical OR
530: .Tp Cm \&&&
531: Logical AND; of higher precedence than ``''.
532: .Tp
533: .Pp
534: As in C,
535: .Nm make
536: will only evaluate a conditional as far as is necessary to determine
537: its value.
538: Parenthesis may be used to change the order of evaluation.
539: The boolean operator ``!'' may be used to logically negate an entire
540: conditional.
541: It is of higher precendence than ``&&''.
542: .Pp
543: The value of
544: .Ar expression
545: may be any of the following:
546: .Tp Ic defined
547: Takes a variable name as an argument and evaluates to true if the variable
548: has been defined.
549: .Tp Ic make
550: Takes a target name as an argument and evaluates to true if the target
551: was specified as part of
552: .Cx Nm make
553: .Cx \'s
554: .Cx
555: command line or was declared the default target (either implicitly or
556: explicitly, see .MAIN) before the line containing the conditional.
557: .Tp Ic empty
558: Takes a variable, with possible modifiers, and evalutes to true if
559: the expansion of the variable would result in an empty string.
560: .Tp Ic exists
561: Takes a file name as an argument and evaluates to true if the file exists.
562: The file is searched for on the system search path (see .PATH).
563: .Tp Ic target
564: Takes a target name as an argument and evaluates to true if the target
565: has been defined.
566: .Tp
567: .Pp
568: .Ar Expression
569: may also be an arithmetic or string comparison, with the left-hand side
570: being a variable expansion.
571: The standard C relational operators are all supported, and the usual
572: number/base conversion is performed.
573: Note, octal numbers are not supported.
574: If the righthand value of a ``=='' or ``!='' operator begins with a
575: quotation mark (``"'') a string comparison is done between the expanded
576: variable and the text between the quotation marks.
577: If no relational operator is given, it is assumed that the expanded
578: variable is being compared against 0.
579: .Pp
580: When
581: .Nm make
582: is evaluating one of these conditional expression, and it encounters
583: a word it doesn't recognize, either the ``make'' or ``defined''
584: expression is applied to it, depending on the form of the conditional.
585: If the form is ``.ifdef'' or ``.ifndef'', the ``defined'' expression
586: is applied.
587: Similarly, if the form is ``.ifmake'' or ``.ifnmake'', the ``make''
588: expression is applied.
589: .Pp
590: If the conditional evaluates to true the parsing of the makefile continues
591: as before.
592: If it evaluates to false, the following lines are skipped.
593: In both cases this continues until a ``.else'' or ``.endif'' is found.
594: .Sh COMMENTS
595: Comments begin with a hash (``#'') character, anywhere but in a shell
596: command line, and continue to the end of the line.
597: .Sh SPECIAL SOURCES
598: .Tp Ic \&.IGNORE
599: Ignore any errors from the commands associated with this target, exactly
600: as if they all were preceded by a dash (``\-'').
601: .Tp Ic \&.MAKE
602: Execute the commands associated with this target even if the -n or -t
603: options were specified.
604: Normally used to mark recursive
605: .Cx Nm make
606: .Cx \'s .
607: .Cx
608: .Tp Ic \&.NOTMAIN
609: Normally
610: .Nm make
611: selects the first target it encounters as the default target to be built
612: if no target was specified.
613: This source prevents this target from being selected.
614: .Tp Ic \&.OPTIONAL
615: If a target is marked with this attribute and
616: .Nm make
617: can't figure out how to create it, it will ignore this fact and assume
618: the file isn't needed or already exists.
619: .Tp Ic \&.PRECIOUS
620: When
621: .Nm make
622: is interrupted, it removes any partially made targets.
623: This source prevents the target from being removed.
624: .Tp Ic \&.SILENT
625: Do not echo any of the commands associated with this target, exactly
626: as if they all were preceded by an at sign (``@'').
627: .Tp Ic \&.USE
628: Turn the target into
629: .Cx Nm make
630: .Cx \'s .
631: .Cx
632: version of a macro.
633: When the target is used as a source for another target, the other target
634: acquires the commands, sources, and attributes (except for .USE) of the
635: source.
636: If the target already has commands, the .USE target's commands are appended
637: to them.
638: .Tp
639: .Sh "SPECIAL TARGETS"
640: Special targets may not be included with other targets, i.e. they must be
641: the only target specified.
642: .Tp Ic \&.BEGIN
643: Any command lines attached to this target are executed before anything
644: else is done.
645: .Tp Ic \&.DEFAULT
646: This is sort of a .USE rule for any target (that was used only as a
647: source) that
648: .Nm make
649: can't figure out any other way to create.
650: Only the shell script is used.
651: The .IMPSRC variable of a target that inherits .DEFAULT's commands is set
652: to the target's own name.
653: .Tp Ic \&.END
654: Any command lines attached to this target are executed after everything
655: else is done.
656: .Tp Ic \&.IGNORE
657: Mark each of the sources with the .IGNORE attribute.
658: If no sources are specified, this is the equivalent of specifying the -i
659: option.
660: .Tp Ic \&.INTERRUPT
661: If
662: .Nm make
663: is interrupted, the commands for this target will be executed.
664: .Tp Ic \&.MAIN
665: If no target is specified when
666: .Nm make
667: is invoked, this target will be built.
668: .Tp Ic \&.MAKEFLAGS
669: This target provides a way to specify flags for
670: .Nm make
671: when the makefile is used.
672: The flags are as if typed to the shell, though the -f option will have
673: no effect.
674: .Tp Ic \&.PATH
675: The sources are directories which are to be searched for files not
676: found in the current directory.
677: If no sources are specified, any previously specified directories are
678: deleted.
679: .Tp Ic \&.PRECIOUS
680: Apply the .PRECIOUS attribute to any specified sources.
681: If no sources are specified, the .PRECIOUS attribute is applied to every
682: target in the file.
683: .Tp Ic \&.SILENT
684: Apply the .SILENT attribute to any specified sources.
685: If no sources are specified, the .SILENT attribute is applied to every
686: command in the file.
687: .Tp Ic \&.SUFFIXES
688: Each source specifies a suffix to
689: .Nm make .
690: If no sources are specified, any previous specifies suffices are deleted.
691: .Sh ENVIRONMENT
692: .Nm Make
693: utilizes the following environment variables, if they exist:
694: .Ev MAKE ,
695: .Ev MAKEFLAGS
696: and
697: .Ev MAKEOBJDIR .
698: .Sh FILES
699: .Dw /usr/share/mk
700: .Di L
701: .Dp Pa /usr/share/mk
702: system makefile directory
703: .Dp Pa sys.mk
704: include system makefile
705: .Dp Pa bsd.mk
706: BSD source tree template
707: .Dp Pa subdir.mk
708: BSD source tree subdirectory template
709: .Dp
710: .Sh SEE ALSO
711: .Sh HISTORY
712: .Nm Make
713: appeared in Version 7 AT&T UNIX.
714: The
715: .Nm make
716: this man page describes is derived from code contributed by Adam
717: de Boor.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.