|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)make.1 6.4 (Berkeley) 8/24/87
6: .\"
7: .TH MAKE 1 "August 24, 1987"
8: .UC 4
9: .SH NAME
10: make \- maintain program groups
11: .SH SYNOPSIS
12: .B make
13: [
14: .B \-f
15: makefile ] [ option ] ...
16: file ...
17: .SH DESCRIPTION
18: .I Make
19: executes commands in
20: .I makefile
21: to update
22: one or more target
23: .IR names .
24: .I Name
25: is typically a program.
26: If no
27: .B \-f
28: option is present, `makefile' and `Makefile' are
29: tried in order.
30: If
31: .I makefile
32: is `\-', the standard input is taken.
33: More than one
34: .B \-f
35: option may appear.
36: .PP
37: .I Make
38: updates a target if it depends on prerequisite files
39: that have been modified since the target was last modified,
40: or if the target does not exist.
41: .PP
42: .I Makefile
43: contains a sequence of entries that specify dependencies.
44: The first line of an entry is a
45: blank-separated list of targets, then a colon,
46: then a list of prerequisite files.
47: Text following a semicolon, and all following lines
48: that begin with a tab, are shell commands
49: to be executed to update the target.
50: If a name appears on the left of more than one `colon' line, then it depends
51: on all of the names on the right of the colon on those lines, but only
52: one command sequence may be specified for it.
53: If a name appears on a line with a double colon
54: .B "::"
55: then the command sequence following that line is performed
56: only if the name is out of date with respect to the names to the right
57: of the double colon, and is not affected by other double colon lines
58: on which that name may appear.
59: .PP
60: Two special forms of a name are recognized.
61: A name like
62: .IR a ( b )
63: means the file named
64: .I b
65: stored in the archive named
66: .I a.
67: A name like
68: .IR a (( b ))
69: means the file stored in archive
70: .I a
71: containing the entry point
72: .I b.
73: .PP
74: Sharp and newline surround comments.
75: .PP
76: The following makefile says that `pgm' depends on two
77: files `a.o' and `b.o', and that they in turn depend on
78: `.c' files and a common file `incl'.
79: .RS
80: .HP
81: .PD 0
82: .nf
83: pgm: a.o b.o
84: cc a.o b.o \-lm \-o pgm
85: .HP
86: a.o: incl a.c
87: cc \-c a.c
88: .HP
89: b.o: incl b.c
90: cc \-c b.c
91: .fi
92: .RE
93: .PD
94: .PP
95: .I Makefile
96: entries of the form
97: .PP
98: .IP
99: string1 = string2
100: .PP
101: are macro definitions.
102: Subsequent appearances of
103: .RI $( string1 )
104: or
105: .RI ${ string1 }
106: are replaced by
107: .IR string2 .
108: If
109: .I string1
110: is a single character, the parentheses or braces
111: are optional.
112: .PP
113: .I Make
114: infers prerequisites for files for which
115: .I makefile
116: gives no construction commands.
117: For example, a
118: `.c' file may be inferred as prerequisite for a `.o' file
119: and be compiled to produce the `.o' file.
120: Thus the preceding example can be done more briefly:
121: .RS
122: .HP
123: .PD 0
124: .nf
125: pgm: a.o b.o
126: cc a.o b.o \-lm \-o pgm
127: .HP
128: a.o b.o: incl
129: .fi
130: .RE
131: .PD
132: .PP
133: Prerequisites are inferred according to selected suffixes
134: listed as the `prerequisites' for the special name `.SUFFIXES';
135: multiple lists accumulate;
136: an empty list clears what came before.
137: Order is significant; the first possible name for which both
138: a file and a rule as described in the next paragraph exist
139: is inferred.
140: The default list is
141: .IP
142: \&.SUFFIXES: .out .o .c .e .r .f .y .l .s .p
143: .PP
144: The rule to create a file with suffix
145: .I s2
146: that depends on a similarly named file with suffix
147: .I s1
148: is specified as an entry
149: for the `target'
150: .IR s1s2 .
151: In such an entry, the special macro $* stands for
152: the target name with suffix deleted, $@ for the full target name,
153: $< for the complete list of prerequisites,
154: and
155: $? for the list of prerequisites that are out of date.
156: For example, a rule for making
157: optimized `.o' files from `.c' files is
158: .IP
159: \&.c.o: ; cc \-c \-O \-o $@ $*.c
160: .PP
161: Certain macros are used by the default inference rules
162: to communicate optional arguments to
163: any resulting compilations.
164: In particular,
165: `CFLAGS' is used for
166: .IR cc (1)
167: options,
168: `FFLAGS' for
169: .IR f77 (1)
170: options,
171: `PFLAGS' for
172: .IR pc (1)
173: options,
174: and `LFLAGS' and `YFLAGS' for
175: .I lex
176: and
177: .IR yacc (1)
178: options. In addition, the macro `MFLAGS' is filled in
179: with the initial command line options supplied to
180: .IR make .
181: This simplifies maintaining a hierarchy of makefiles as
182: one may then invoke
183: .I make
184: on makefiles in subdirectories and pass along useful options
185: such as
186: .BR \-k .
187: .PP
188: The environment is read by \fImake\fP. All variables are assumed to be
189: macro definitions and processed as such. The environmental variables
190: are processed before any makefile and after the internal rules; thus,
191: macro assignments in a makefile override environmental variables. The
192: \fB-e\fP option causes the environment to override the macro assignments
193: in a makefile. As with macro assignments, environmental variables are
194: always overriden by the command line.
195: .PP
196: Another special macro is `VPATH'.
197: The `VPATH' macro should be set to a list of directories separated by colons.
198: When
199: .I make
200: searches for a file as a result of a dependency relation, it will
201: first search the current directory and then each of the directories on the
202: `VPATH' list.
203: If the file is found, the actual path to the file will be used, rather than
204: just the filename.
205: If `VPATH' is not defined, then only the current directory is searched.
206: .PP
207: One use for `VPATH' is when one has several programs that compile from the
208: same source.
209: The source can be kept in one directory and each set of
210: object files (along with a separate
211: .IR makefile )
212: would be in a separate subdirectory.
213: The `VPATH' macro would point to the source directory in this case.
214: .PP
215: Command lines are executed one at a time, each by its
216: own shell.
217: A line is printed when it is executed unless
218: the special target `.SILENT'
219: is in
220: .I makefile,
221: or the first character of the command is `@'.
222: .PP
223: Commands returning nonzero status (see
224: .IR intro (1))
225: cause
226: .I make
227: to terminate unless
228: the special target `.IGNORE' is in
229: .I makefile
230: or the command begins with
231: <tab><hyphen>.
232: .PP
233: Interrupt and quit cause the target to be deleted
234: unless the target is a directory or
235: depends on the special name `.PRECIOUS'.
236: .PP
237: Other options:
238: .TP
239: .B \-e
240: Environmental variables override assignments within makefiles.
241: .TP
242: .B \-i
243: Equivalent to the special entry `.IGNORE:'.
244: .TP
245: .B \-k
246: When a command returns nonzero status,
247: abandon work on the current entry, but
248: continue on branches that do not depend on the current entry.
249: .TP
250: .B \-n
251: Trace and print, but do not execute the commands
252: needed to update the targets.
253: .TP
254: .B \-t
255: Touch, i.e. update the modified date of targets, without
256: executing any commands.
257: .TP
258: .B \-r
259: Equivalent to an initial special entry `.SUFFIXES:'
260: with no list.
261: .TP
262: .B \-s
263: Equivalent to the special entry
264: `.SILENT:'.
265: .SH FILES
266: makefile, Makefile
267: .br
268: .SH "SEE ALSO"
269: sh(1), touch(1), f77(1), pc(1), getenv(3)
270: .br
271: S. I. Feldman
272: .I
273: Make \- A Program for Maintaining Computer Programs
274: .SH BUGS
275: Some commands return nonzero status inappropriately.
276: Use
277: .B \-i
278: to overcome the difficulty.
279: .br
280: Commands that are directly executed by the shell,
281: notably
282: .IR cd (1),
283: are ineffectual across newlines in
284: .I make.
285: .PP
286: `VPATH' is intended to act like the System V `VPATH' support,
287: but there is no guarantee that it functions identically.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.