h files that include h files

Jonathan I. Kamens jik at athena.mit.edu
Wed Jan 17 11:11:11 AEST 1990


In article <997 at manta.NOSC.MIL>, psm at manta.NOSC.MIL (Scot Mcintosh) writes:
> In a makefile, how should one handle the case where some
> of the .h files include other .h files?  I see two 
> possibilities: make dependencies for them, and 'touch'
> the dependent ones, thus causing the .c files that depend on
> them to be made.  Or, examine all of the .h files, figure out
> the nesting and then put all of the pertinent ones in
> the .c file's dependency.

  Various shell scripts and binary programs have been written to do
automatically what you described in your second possibility (but the
dependency would be associated with the .o file, not the .c file).

  Typically, they use either the -E or -M flag of the compiler.  The -E
flag, on compilers that have it (most of them), outputs the
pre-processed text that would be compiled, without actually compiling
it.  Interspersed in this text is various lines like

  # 1 "main.c"
  # 1 "./xsaver.h"
  # 1 "/usr/include/X11/Intrinsic.h"

which are used later by the preprocessor to build the symbol tables into
the binaries.  These lines can be played with using sed et al to
generate a dependency list suitable for inclusion in a makefile.

  The -M flag, con compilers that have it (fewer than have the -E flag,
I think) actually outputs a dependency list.

  The shell script versions tend to be slow -- a binary dedicated to
figuring out dependencies by reading the preprocessor directives tends
to do it faster.  Such a binary (called "makedepend") is released as
part of the standard X window system distribution -- if you have X at
your site, then you have the binary (or its sources) somewhere, or you
can ftp it from an X archive site.

Jonathan Kamens			              USnail:
MIT Project Athena				11 Ashford Terrace
jik at Athena.MIT.EDU				Allston, MA  02134
Office: 617-253-8495			      Home: 617-782-0710



More information about the Comp.unix.questions mailing list