Makefile madness

Brendan Eich brendan at illyria.wpd.sgi.com
Tue Mar 19 06:46:49 AEST 1991


In article <9103161639.AA00820 at karron.med.nyu.edu>, Dan Karron at UCBVAX.BERKELEY.EDU writes:
> 
> I want to make a standard make/smake/pmake rule for the depend: pseudotarget.
> 
> Then I want to include the list of target rules generated by makedepend, but
> if the file generated by makedepend is not found, make aborts. Now how
> can I get around this circular problem:
> 
> If Makedepend is not found as an include file, just run mkdepend instead of
> aborting!
> 
> Also, how can I make all of the .c or .h files a dependency for depend : ?

Take a look at /usr/include/make/commonrules (and its predecessor in
the same directory, commondefs).  These files are used by almost all
SGI makefiles.  Commonrules contains a big depend rule with some gory
SGI-specific multipleple-product-handling code in it, and a separate
incdepend rule that relates a timestamp file to the source files (the
.c and .h files you mention).  We keep incdepend separate from depend
so that one can re-make all dependencies without having to remove the
timestamp file.

Commonrules wants you to list your source files in CFILES, C++FILES, &c.
It uses SGI's "sinclude" extension to make(1) (also supported by smake)
to include the generated make dependencies from a separate file if it
exists, and to silently proceed if the file to include can't be found.
Thus, you could write a depend rule that tests for the existence and
non-emptiness of this Makedepend file and run mkdepend if (despite the
fact that make already performed the sinclude) no such file existed.

But you would then want make to re-read the makefile and re-sinclude
the new dependencies.  This would suggest bailing out with a word of
advice to the user, or a recursive invocation of $(MAKE).

Are you using mkdepend(1), X's makedepend, a combination of these, or
something else?

/be



More information about the Comp.sys.sgi mailing list