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.6 2001/12/17 20:52:22 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
|
---|