COHERENT manpages
This page displays the COHERENT manpage for makedepend [Generate list of dependencies for a makefile].
List of available manpages
Index
makedepend -- X Utility Generate list of dependencies for a makefile makedepend [-Dname=def] [-Dname] [-Iincludedir] [-Yincludedir] [-a] [- fmakefile] [-oobjsuffix] [-pobjprefix] [-sstring] [-wwidth] [-v] [-m] [-- otheroption ...--] sourcefile ... makedepend reads each sourcefile, and parses it as the C preprocessor does. It processes every #include, #define, #undef, #ifdef, #ifndef, #endif, #if, and #else directives so that it can correctly tell which #include directives should be used in a compilation. Any #include directive can reference a file that has other #include directives, and makedepend parses these files as well. Every file that a sourcefile includes, directly or indirectly, is what makedepend calls a dependency. It writes these dependencies into a makefile in such a way that make will know which object files must be recompiled when a dependency has changed. By default, makedepend writes its output into a file named makefile, if it exists; otherwise, it writes its output into Makefile. You can specify an alternate makefile with the option -f. makedepend first searches the makefile for the line # DO NOT DELETE THIS LINE -- make depend depends on it. or one provided with the option -s as a delimiter for the dependency output. If it finds the line, it deletes everything after after this line to the end of the makefile, and writes its output after this line. If makedepend does not find this line, it appends the string to the end of the makefile and writes the output after that. For each sourcefile, makedepend writes into the makefile a line of the form sourcefile.o: dfile ... where sourcefile.o is the name of the sourcefile with its suffix replaced .o, and dfile is a dependency that makedepend discovered in a #include directive as it parsed sourcefile or one of the files it includes. Command-line Options makedepend ignores any option it does not understand, so you can use the same arguments that you would for cc. It does recognize the following command-line options: -Dsymbol[=def] Define symbol within makedepend's internal symbol table. Without =def, makedepend defines it as 1. -Iincludedir Tell makedepend to prefix includedir onto the list of directories to search when it encounters a #include directive. By default, makedepend only searches only /usr/include. -Y[includedir] Search includedir for header files instead of all of the standard header-file directories. If you omit to name an includedir, this option prevents searching of the standard header-file directories. -a Append the dependencies to the end of the file instead of replacing them. -ffile Write output into file instead of into makefile. -oobjsuffix Append objectsuffix to a filename instead of the default .o. -pobjprefix Prefix the name of each object file with objprefix. This usually is used to designate a different directory for the object file. The default is the empty string. -sstring Use string as the starting-string delimiter within a makefile. -wwidth Set the width of a line of output to width. By default, makedepend limits a line of output to 78 characters. -v Verbose: tell makedepend to write onto the standard output the list of files that each input file includes. -m Warn about multiple inclusion. This option tells makedepend to warn if any input file includes another file more than once. In previous versions of makedepend, this was the default behavior; the default has been changed to better match the behavior of the C compiler, which does not consider multiple inclusion to be an error. This option is provided for backward compatibility, and to aid in debugging problems related to multiple inclusion. -- option ... -- makedepend ignores every option that it does not recognize and that is bracked by two hyphens `--'. In this way, you can safely tell makedepend to ignore esoteric compiler arguments that might normally be found in a CFLAGS macro. makedepend processes normally all options between the pair of double hyphens that recognizes. Algorithm To speed its performance, makedepend makes two assumptions about the programs whose dependency it is mapping: first, that all files compiled by a single makefile will be compiled with roughly the same -I and -D options; and second, that most files in a directory include largely the same files. Given these assumptions, makedepend expects to be called once for each makefile, with all source files that that makefile maintains appearing on its command line. makedepend parses each source and header file exactly once, and maintains an internal symbol table for each. Thus, the first file on the command line will take an amount of time proportional to the amount of time that a normal C preprocessor takes. However, on subsequent files, if makedepend encounters a header file that it has already parsed, it does not parse it again. For example, imagine you are compiling two files, file1.c and file2.c. Assume, further, that each includes the header file header.h, and header.h in turn includes the files def1.h and def2.h. When you run the command makedepend file1.c file2.c makedepend parses file1.c and, therefore, header.h followed by def1.h and def2.h. It then decides that the dependencies for this file are file1.o: header.h def1.h def2.h When makedepend parses file2.c and discovers that it, too, includes header.h, it does not re-parse that file, but simply adds header.h, def1.h, and def2.h to the list of dependencies for file2.o. Example makedepend normally is used within a makefile target, so that typing the command make depend brings the dependencies up to date for the makefile. For example, SRCS = file1.c file2.c ... CFLAGS = -O -DHACK -I../foobar -xyz depend: makedepend -- $(CFLAGS) -- $(SRCS) See Also cc, commands, make X Windows Manual: imake Notes makedepend was written by Todd Brunhoff of Tektronix, Inc., and MIT Project Athena.