|
|
1.1 root 1:
2:
3: make Command make
4:
5:
6:
7:
8: Program building discipline
9:
10: mmaakkee [_o_p_t_i_o_n ...] [_a_r_g_u_m_e_n_t ...] [_t_a_r_g_e_t ...]
11:
12: mmaakkee helps you build programs that consist of more than one file
13: of source code.
14:
15: Complex programs often consist of several _o_b_j_e_c_t _m_o_d_u_l_e_s, each of
16: which is the product of compiling a _s_o_u_r_c_e _f_i_l_e. A source file
17: may refer to one or more iinncclluuddee files, which can also be
18: changed. Some programs may be generated from specifications
19: given to program generators, such as yyaacccc. Recompiling and
20: relinking complicated programs can be difficult and tedious.
21:
22: mmaakkee regenerates programs automatically. It follows a
23: specification of the structure of the program that you write into
24: a file called mmaakkeeffiillee. mmaakkee also checks the date and time that
25: COHERENT has recorded for each source file and its corresponding
26: object module; to avoid unnecessary recompilation, mmaakkee will
27: recompile a source file only if it has been altered since its
28: object module was last compiled.
29:
30: ***** The Makefile *****
31:
32: A mmaakkeeffiillee consists of three types of instructions: _m_a_c_r_o
33: _d_e_f_i_n_i_t_i_o_n_s, _d_e_p_e_n_d_e_n_c_y _d_e_f_i_n_i_t_i_o_n_s, and _c_o_m_m_a_n_d_s.
34:
35: A macro definition simply defines a macro for use throughout the
36: mmaakkeeffiillee; for example, the macro definition
37:
38:
39: FILES=file1.o file2.o file3.o
40:
41:
42: Note the use of the equal sign `='.
43:
44: A dependency definition names the object modules used to build
45: the target program, and source files used to build each object
46: module . It consists of the _t_a_r_g_e_t _n_a_m_e, or name of the program
47: to be created, followed by a colon `:' and the names of the
48: object modules that build it. For example, the statement
49:
50:
51: example: $(FILES)
52:
53:
54: uses the macro FFIILLEESS to name the object modules used to build the
55: program eexxaammppllee. Likewise, the dependency definition
56:
57:
58:
59:
60:
61:
62:
63:
64: COHERENT Lexicon Page 1
65:
66:
67:
68:
69: make Command make
70:
71:
72:
73: file1.o: file1.c macros.h
74:
75:
76: defines the object module ffiillee11.oo as consisting of the source
77: file ffiillee11.cc and the header file mmaaccrrooss.hh.
78:
79: Finally, a command line details an action that mmaakkee must perform
80: to build the target program. Each command line must begin with a
81: space or tab character. For example, the command line
82:
83:
84: cc -o example $(FILES)
85:
86:
87: gives the cccc command needed to build the program eexxaammppllee. The cccc
88: command lists the _o_b_j_e_c_t _m_o_d_u_l_e_s to be used, _n_o_t the source
89: files.
90:
91: Note that if you prefix an action with a hyphen `-', mmaakkee will
92: ignore errors in the action. If the action is prefixed by `@',
93: it tells mmaakkee to be silent about the action -- that is, do not
94: echo the command to the standard output.
95:
96: Finally, you can embed comments within a mmaakkeeffiillee. mmaakkee
97: recognizes any line that begins with a pound sign `#' as being a
98: comment, and ignores it.
99:
100: mmaakkee searches for mmaakkeeffiillee first in directories named in the
101: environmental variable PPAATTHH, and then in the current directory.
102:
103: ***** Dependencies *****
104:
105: The mmaakkeeffiillee specifies which files depend upon other files, and
106: how to recreate the dependent files. For example, if the target
107: file tteesstt depends upon the object module tteesstt.oo, the dependency
108: is as follows:
109:
110:
111: test: test.o
112: cc -o test test.o
113:
114:
115: mmaakkee knows about common dependencies, e.g., that .oo files depend
116: upon .cc files with the same base name. The target .SSUUFFFFIIXXEESS
117: contains the suffixes that mmaakkee recognizes.
118:
119: mmaakkee also has a set of rules to regenerate dependent files. For
120: example, for a source file with suffix .cc and a dependent file
121: with the suffix .oo, the target .cc.oo gives the regeneration rule:
122:
123:
124:
125:
126:
127:
128:
129:
130: COHERENT Lexicon Page 2
131:
132:
133:
134:
135: make Command make
136:
137:
138:
139: .c.o:
140: cc -c $<
141:
142:
143: The -cc option to the cccc commands tells cccc not to link or erase
144: the compiled object module. $< is a macro that mmaakkee defines; it
145: stands for the name of the file that causes the current action.
146: The default suffixes and rules are kept in the files
147: /uussrr/lliibb/mmaakkeemmaaccrrooss and /uussrr/lliibb/mmaakkeeaaccttiioonnss.
148:
149: ***** Macros *****
150:
151: To simplify the writing of complex dependencies, mmaakkee provides a
152: _m_a_c_r_o facility. To define a macro, write
153:
154:
155: NNAAMMEE = ssttrriinngg
156:
157:
158: _s_t_r_i_n_g is terminated by the end-of-line character, so it can
159: contain blanks. To refer to the value of the macro, use a dollar
160: sign `$' followed by the macro name enclosed in parentheses:
161:
162:
163: $(NNAAMMEE)
164:
165:
166: If the macro name is one character, parentheses are not
167: necessary. mmaakkee uses macros in the definition of default rules:
168:
169:
170: .c.o:
171: $(CC) $(CFLAGS) -c $<
172:
173:
174: where the macros are defined as
175:
176:
177: CC=cc
178: CFLAGS=-V
179:
180:
181: The other built-in macros are:
182:
183:
184: $* Target name, minus suffix
185: $@ Full target name
186: $< List of referred files
187: $? Referred files newer than target
188:
189:
190: Each command line _a_r_g_u_m_e_n_t should be a macro definition of the
191: form
192:
193:
194:
195:
196: COHERENT Lexicon Page 3
197:
198:
199:
200:
201: make Command make
202:
203:
204:
205:
206: OBJECT=a.o b.o
207:
208:
209: Arguments that include spaces must be surrounded by quotation
210: marks, because blanks are significant to the shell sshh.
211:
212: You can specify macro definitions in the mmaakkeeffiillee, in the
213: environment, or as a command-line argument. A macro defined as a
214: command-line argument always overrides a definition of the same
215: macro name in the environment or in the mmaakkeeffiillee. Normally, a
216: definition in a mmaakkeeffiillee overrides a definition of the same macro
217: name in the environment; however, with the -e option (described
218: below), a definition in the environment overrides a definition in
219: the mmaakkeeffiillee.
220:
221: ***** Options *****
222:
223: The following lists the options that can be passed to mmaakkee on its
224: command line.
225:
226: -dd (Debug) Give verbose printout of all decisions and
227: information going into decisions.
228:
229: -ee Force macro definitions in environment to override those in
230: the mmaakkeeffiillee.
231:
232: -ff _f_i_l_e
233: _f_i_l_e contains the mmaakkee specification. If this option does
234: not appear, mmaakkee uses the file mmaakkeeffiillee, which is sought
235: first in the directories named in the PPAATTHH environmental
236: variable, and then in the current directory. If _f_i_l_e is `-
237: ', mmaakkee uses the standard input; note, however, that the
238: standard input can be used _o_n_l_y if it is piped.
239:
240: -ii Ignore all errors from commands, and continue processing.
241: Normally, mmaakkee exits if a command returns an error.
242:
243: -nn Test only; suppresses actual execution of commands.
244:
245: -pp Print all macro definitions and target descriptions.
246:
247: -qq Return a zero exit status if the targets are up to date. Do
248: not execute any commands.
249:
250: -rr Do not use the built-in rules that describe dependencies.
251:
252: -ss Do not print command lines when executing them. Commands
253: preceded by `@' are not printed, except under the -nn option.
254:
255: -tt (Touch option) Force the dates of targets to be the current
256: time, and bypass actual regeneration.
257:
258:
259:
260:
261:
262: COHERENT Lexicon Page 4
263:
264:
265:
266:
267: make Command make
268:
269:
270:
271: ***** Source File Path *****
272:
273: If a file is not specified with an absolute pathname beginning
274: with `/', mmaakkee first looks for the file in the current directory.
275: If the file is not found in the current directory, mmaakkee searches
276: for it in the list of directories specified by macro $(SSRRCCPPAATTHH).
277: This allows you to compile a program in an object directory
278: separate from the source directory. For example
279:
280:
281: export SRCPATH=/usr/src/local/me
282: make
283:
284:
285: or alteratively
286:
287:
288: make SRCPATH=/usr/src/local/me
289:
290:
291: builds objects in the current directory as specified by the
292: mmaakkeeffiillee and sources in /uussrr/ssrrcc/llooccaall/mmee. To test changes to a
293: program built from several source files, copy only the files you
294: wish to change to the current directory; make will use the local
295: sources and find the other sources on the $(SSRRCCPPAATTHH).
296:
297: Note that $(SSRRCCPPAATTHH) can be a single directory, as in the above
298: example, or a `:'-separated list of directories, as described in
299: the Lexicon entry for the function ppaatthh().
300:
301: ***** Files *****
302:
303: mmaakkeeffiillee
304: MMaakkeeffiillee -- List of dependencies and commands
305: /uussrr/lliibb/mmaakkeeaaccttiioonnss -- Default actions
306: /uussrr/lliibb/mmaakkeemmaaccrrooss -- Default macros
307:
308: ***** See Also *****
309:
310: aass, cccc, ccoommmmaannddss, lldd, ssrrccppaatthh, ttoouucchh
311: _T_h_e _m_a_k_e _P_r_o_g_r_a_m_m_i_n_g _D_i_s_c_i_p_l_i_n_e, tutorial
312:
313: ***** Diagnostics *****
314:
315: mmaakkee reports its exit status if it is interrupted or if an
316: executed command returns error status. It replies ``Target _n_a_m_e
317: not defined'' or ``Don't know how to make target _n_a_m_e'' if it
318: cannot find appropriate rules.
319:
320: ***** Notes *****
321:
322: The order of items in mmaakkeemmaaccrrooss/.SSUUFFFFIIXXEESS is significant. The
323: consequent of a default rule (e.g., .oo) must _p_r_e_c_e_d_e the
324: antecedent (e.g., .cc) in the entry .SSUUFFFFIIXXEESS. Otherwise, mmaakkee
325: will not work properly.
326:
327:
328: COHERENT Lexicon Page 5
329:
330:
331:
332:
333: make Command make
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394: COHERENT Lexicon Page 6
395:
396:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.