|
1 .\" $Xorg: mkdepend.man,v 1.5 2001/02/09 02:03:16 xorgcvs Exp $ |
|
2 .\" Copyright (c) 1993, 1994, 1998 The Open Group |
|
3 .\" |
|
4 .\" Permission to use, copy, modify, distribute, and sell this software and its |
|
5 .\" documentation for any purpose is hereby granted without fee, provided that |
|
6 .\" the above copyright notice appear in all copies and that both that |
|
7 .\" copyright notice and this permission notice appear in supporting |
|
8 .\" documentation. |
|
9 .\" |
|
10 .\" The above copyright notice and this permission notice shall be included in |
|
11 .\" all copies or substantial portions of the Software. |
|
12 .\" |
|
13 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
14 .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
15 .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
|
16 .\" THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
|
17 .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF |
|
18 .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
19 .\" SOFTWARE. |
|
20 .\" |
|
21 .\" Except as contained in this notice, the name of The Open Group shall not |
|
22 .\" be used in advertising or otherwise to promote the sale, use or other |
|
23 .\" dealing in this Software without prior written authorization from The |
|
24 .\" Open Group. |
|
25 .\" |
|
26 .\" $XFree86: xc/config/makedepend/mkdepend.man,v 1.7 2002/12/14 02:39:45 dawes Exp $ |
|
27 .\" |
|
28 .TH MAKEDEPEND 1 __xorgversion__ |
|
29 .UC 4 |
|
30 .SH NAME |
|
31 makedepend \- create dependencies in makefiles |
|
32 .SH SYNOPSIS |
|
33 .B makedepend |
|
34 [ |
|
35 .BI \-D name\fB=\fPdef |
|
36 ] [ |
|
37 .BI \-D name |
|
38 ] [ |
|
39 .BI \-I includedir |
|
40 ] [ |
|
41 .BI \-Y includedir |
|
42 ] [ |
|
43 .B \-a |
|
44 ] [ |
|
45 .BI \-f makefile |
|
46 ] [ |
|
47 .BI \-include \ file |
|
48 ] [ |
|
49 .BI \-o objsuffix |
|
50 ] [ |
|
51 .BI \-p objprefix |
|
52 ] [ |
|
53 .BI \-s string |
|
54 ] [ |
|
55 .BI \-w width |
|
56 ] [ |
|
57 .B \-v |
|
58 ] [ |
|
59 .B \-m |
|
60 ] [ |
|
61 \-\^\- |
|
62 .I otheroptions |
|
63 \-\^\- |
|
64 ] |
|
65 .I sourcefile |
|
66 \&.\|.\|. |
|
67 .br |
|
68 .SH DESCRIPTION |
|
69 The |
|
70 .B makedepend |
|
71 program reads each |
|
72 .I sourcefile |
|
73 in sequence and parses it like a C-preprocessor, |
|
74 processing all |
|
75 .I #include, |
|
76 .I #define, |
|
77 .I #undef, |
|
78 .I #ifdef, |
|
79 .I #ifndef, |
|
80 .I #endif, |
|
81 .I #if, |
|
82 .I #elif |
|
83 and |
|
84 .I #else |
|
85 directives so that it can correctly tell which |
|
86 .I #include, |
|
87 directives would be used in a compilation. |
|
88 Any |
|
89 .I #include, |
|
90 directives can reference files having other |
|
91 .I #include |
|
92 directives, and parsing will occur in these files as well. |
|
93 .PP |
|
94 Every file that a |
|
95 .I sourcefile |
|
96 includes, |
|
97 directly or indirectly, |
|
98 is what |
|
99 .B makedepend |
|
100 calls a \fIdependency.\fP |
|
101 These dependencies are then written to a |
|
102 .I makefile |
|
103 in such a way that |
|
104 .B make(1) |
|
105 will know which object files must be recompiled when a dependency has changed. |
|
106 .PP |
|
107 By default, |
|
108 .B makedepend |
|
109 places its output in the file named |
|
110 .I makefile |
|
111 if it exists, otherwise |
|
112 .I Makefile. |
|
113 An alternate makefile may be specified with the |
|
114 .B \-f |
|
115 option. |
|
116 It first searches the makefile for |
|
117 the line |
|
118 .sp |
|
119 \& # DO NOT DELETE THIS LINE \-\^\- make depend depends on it. |
|
120 .sp |
|
121 or one provided with the |
|
122 .B \-s |
|
123 option, |
|
124 as a delimiter for the dependency output. |
|
125 If it finds it, it will delete everything |
|
126 following this to the end of the makefile |
|
127 and put the output after this line. |
|
128 If it doesn't find it, the program |
|
129 will append the string to the end of the makefile |
|
130 and place the output following that. |
|
131 For each |
|
132 .I sourcefile |
|
133 appearing on the command line, |
|
134 .B makedepend |
|
135 puts lines in the makefile of the form |
|
136 .sp |
|
137 sourcefile.o:\0dfile .\|.\|. |
|
138 .sp |
|
139 Where \fIsourcefile.o\fP is the name from the command |
|
140 line with its suffix replaced with ``.o'', |
|
141 and \fIdfile\fP is a dependency discovered in a |
|
142 .I #include |
|
143 directive while parsing |
|
144 .I sourcefile |
|
145 or one of the files it included. |
|
146 .SH EXAMPLE |
|
147 Normally, |
|
148 .B makedepend |
|
149 will be used in a makefile target so that typing ``make depend'' will |
|
150 bring the dependencies up to date for the makefile. |
|
151 For example, |
|
152 .nf |
|
153 SRCS\0=\0file1.c\0file2.c\0.\|.\|. |
|
154 CFLAGS\0=\0\-O\0\-DHACK\0\-I\^.\^.\^/foobar\0\-xyz |
|
155 depend: |
|
156 makedepend\0\-\^\-\0$(CFLAGS)\0\-\^\-\0$(SRCS) |
|
157 .fi |
|
158 .SH OPTIONS |
|
159 The program |
|
160 will ignore any option that it does not understand so that you may use |
|
161 the same arguments that you would for |
|
162 .B cc(1). |
|
163 .TP 5 |
|
164 .B \-D\fIname\fP=\fIdef\fP \fRor\fP \-D\fIname\fP |
|
165 Define. |
|
166 This places a definition for |
|
167 .I name |
|
168 in |
|
169 .B makedepend's |
|
170 symbol table. |
|
171 Without |
|
172 .I =def\| |
|
173 the symbol becomes defined as ``1''. |
|
174 .TP 5 |
|
175 .B \-I\fIincludedir\fP |
|
176 Include directory. |
|
177 This option tells |
|
178 .B makedepend |
|
179 to prepend |
|
180 .I includedir |
|
181 to its list of directories to search when it encounters |
|
182 a |
|
183 .I #include |
|
184 directive. |
|
185 By default, |
|
186 .B makedepend |
|
187 only searches the standard include directories (usually /usr/include |
|
188 and possibly a compiler-dependent directory). |
|
189 .TP 5 |
|
190 .B \-Y\fIincludedir\fP |
|
191 Replace all of the standard include directories with the single specified |
|
192 include directory; you can omit the |
|
193 .I includedir |
|
194 to simply prevent searching the standard include directories. |
|
195 .TP 5 |
|
196 .B \-a |
|
197 Append the dependencies to the end of the file instead of replacing them. |
|
198 .TP 5 |
|
199 .B \-f\fImakefile\fP |
|
200 Filename. |
|
201 This allows you to specify an alternate makefile in which |
|
202 .B makedepend |
|
203 can place its output. |
|
204 Specifying ``\-'' as the file name (i.e., \fB\-f\-\fP) sends the |
|
205 output to standard output instead of modifying an existing file. |
|
206 .TP 5 |
|
207 .B \-include \fIfile\fP |
|
208 Process file as input, and include all the resulting output |
|
209 before processing the regular input file. This has the same |
|
210 affect as if the specified file is an include statement that |
|
211 appears before the very first line of the regular input file. |
|
212 .TP 5 |
|
213 .B \-o\fIobjsuffix\fP |
|
214 Object file suffix. |
|
215 Some systems may have object files whose suffix is something other |
|
216 than ``.o''. |
|
217 This option allows you to specify another suffix, such as |
|
218 ``.b'' with |
|
219 .I \-o.b |
|
220 or ``:obj'' |
|
221 with |
|
222 .I \-o:obj |
|
223 and so forth. |
|
224 .TP 5 |
|
225 .B \-p\fIobjprefix\fP |
|
226 Object file prefix. |
|
227 The prefix is prepended to the name of the object file. This is |
|
228 usually used to designate a different directory for the object file. |
|
229 The default is the empty string. |
|
230 .TP 5 |
|
231 .B \-s\fIstring\fP |
|
232 Starting string delimiter. |
|
233 This option permits you to specify |
|
234 a different string for |
|
235 .B makedepend |
|
236 to look for in the makefile. |
|
237 .TP 5 |
|
238 .B \-w\fIwidth\fP |
|
239 Line width. |
|
240 Normally, |
|
241 .B makedepend |
|
242 will ensure that every output line that it writes will be no wider than |
|
243 78 characters for the sake of readability. |
|
244 This option enables you to change this width. |
|
245 .TP 5 |
|
246 .B \-v |
|
247 Verbose operation. |
|
248 This option causes |
|
249 .B makedepend |
|
250 to emit the list of files included by each input file. |
|
251 .TP 5 |
|
252 .B \-m |
|
253 Warn about multiple inclusion. |
|
254 This option causes |
|
255 .B makedepend |
|
256 to produce a warning if any input file includes another file more than |
|
257 once. In previous versions of |
|
258 .B makedepend |
|
259 this was the default behavior; the default has been changed to better |
|
260 match the behavior of the C compiler, which does not consider multiple |
|
261 inclusion to be an error. This option is provided for backward |
|
262 compatibility, and to aid in debugging problems related to multiple |
|
263 inclusion. |
|
264 .TP 5 |
|
265 .B "\-\^\- \fIoptions\fP \-\^\-" |
|
266 If |
|
267 .B makedepend |
|
268 encounters a double hyphen (\-\^\-) in the argument list, |
|
269 then any unrecognized argument following it |
|
270 will be silently ignored; a second double hyphen terminates this |
|
271 special treatment. |
|
272 In this way, |
|
273 .B makedepend |
|
274 can be made to safely ignore esoteric compiler arguments that might |
|
275 normally be found in a CFLAGS |
|
276 .B make |
|
277 macro (see the |
|
278 .B EXAMPLE |
|
279 section above). |
|
280 All options that |
|
281 .B makedepend |
|
282 recognizes and appear between the pair of double hyphens |
|
283 are processed normally. |
|
284 .SH ALGORITHM |
|
285 The approach used in this program enables it to run an order of magnitude |
|
286 faster than any other ``dependency generator'' I have ever seen. |
|
287 Central to this performance are two assumptions: |
|
288 that all files compiled by a single |
|
289 makefile will be compiled with roughly the same |
|
290 .I \-I |
|
291 and |
|
292 .I \-D |
|
293 options; |
|
294 and that most files in a single directory will include largely the |
|
295 same files. |
|
296 .PP |
|
297 Given these assumptions, |
|
298 .B makedepend |
|
299 expects to be called once for each makefile, with |
|
300 all source files that are maintained by the |
|
301 makefile appearing on the command line. |
|
302 It parses each source and include |
|
303 file exactly once, maintaining an internal symbol table |
|
304 for each. |
|
305 Thus, the first file on the command line will take an amount of time |
|
306 proportional to the amount of time that a normal C preprocessor takes. |
|
307 But on subsequent files, if it encounters an include file |
|
308 that it has already parsed, it does not parse it again. |
|
309 .PP |
|
310 For example, |
|
311 imagine you are compiling two files, |
|
312 .I file1.c |
|
313 and |
|
314 .I file2.c, |
|
315 they each include the header file |
|
316 .I header.h, |
|
317 and the file |
|
318 .I header.h |
|
319 in turn includes the files |
|
320 .I def1.h |
|
321 and |
|
322 .I def2.h. |
|
323 When you run the command |
|
324 .sp |
|
325 makedepend\0file1.c\0file2.c |
|
326 .sp |
|
327 .B makedepend |
|
328 will parse |
|
329 .I file1.c |
|
330 and consequently, |
|
331 .I header.h |
|
332 and then |
|
333 .I def1.h |
|
334 and |
|
335 .I def2.h. |
|
336 It then decides that the dependencies for this file are |
|
337 .sp |
|
338 file1.o:\0header.h\0def1.h\0def2.h |
|
339 .sp |
|
340 But when the program parses |
|
341 .I file2.c |
|
342 and discovers that it, too, includes |
|
343 .I header.h, |
|
344 it does not parse the file, |
|
345 but simply adds |
|
346 .I header.h, |
|
347 .I def1.h |
|
348 and |
|
349 .I def2.h |
|
350 to the list of dependencies for |
|
351 .I file2.o. |
|
352 .SH "SEE ALSO" |
|
353 cc(1), make(1) |
|
354 .SH BUGS |
|
355 .B makedepend |
|
356 parses, but does not currently evaluate, the SVR4 #predicate(token-list) |
|
357 preprocessor expression; such expressions are simply assumed to be true. |
|
358 This may cause the wrong |
|
359 .I #include |
|
360 directives to be evaluated. |
|
361 .PP |
|
362 Imagine you are parsing two files, |
|
363 say |
|
364 .I file1.c |
|
365 and |
|
366 .I file2.c, |
|
367 each includes the file |
|
368 .I def.h. |
|
369 The list of files that |
|
370 .I def.h |
|
371 includes might truly be different when |
|
372 .I def.h |
|
373 is included by |
|
374 .I file1.c |
|
375 than when it is included by |
|
376 .I file2.c. |
|
377 But once |
|
378 .B makedepend |
|
379 arrives at a list of dependencies for a file, |
|
380 it is cast in concrete. |
|
381 .SH AUTHOR |
|
382 Todd Brunhoff, Tektronix, Inc. and MIT Project Athena |