home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-bin / x11r6.1 / man / cat1 / makedepend.0 < prev    next >
Encoding:
Text File  |  1996-10-17  |  10.4 KB  |  265 lines

  1.  
  2.  
  3.  
  4. MAKEDEPEND(1)                        MAKEDEPEND(1)
  5.  
  6.  
  7. NNAAMMEE
  8.        makedepend - create dependencies in makefiles
  9.  
  10. SSYYNNOOPPSSIISS
  11.        mmaakkeeddeeppeenndd  [  --DD_n_a_m_e==_d_e_f  ] [ --DD_n_a_m_e ] [ --II_i_n_c_l_u_d_e_d_i_r ] [
  12.        --YY_i_n_c_l_u_d_e_d_i_r ] [ --aa ] [ --ff_m_a_k_e_f_i_l_e ]  [    --oo_o_b_j_s_u_f_f_i_x  ]    [
  13.        --pp_o_b_j_p_r_e_f_i_x  ] [ --ss_s_t_r_i_n_g ] [ --ww_w_i_d_t_h ] [ --vv ] [ --mm ] [ --
  14.        _o_t_h_e_r_o_p_t_i_o_n_s -- ] _s_o_u_r_c_e_f_i_l_e ...
  15.  
  16. DDEESSCCRRIIPPTTIIOONN
  17.        The mmaakkeeddeeppeenndd program reads each _s_o_u_r_c_e_f_i_l_e  in     sequence
  18.        and  parses  it    like  a     C-preprocessor,  processing  all
  19.        _#_i_n_c_l_u_d_e_, _#_d_e_f_i_n_e_, _#_u_n_d_e_f_, _#_i_f_d_e_f_, _#_i_f_n_d_e_f_,  _#_e_n_d_i_f_,  _#_i_f_,
  20.        _#_e_l_i_f  and  _#_e_l_s_e directives so that it can correctly tell
  21.        which _#_i_n_c_l_u_d_e_, directives would be used in a compilation.
  22.        Any  _#_i_n_c_l_u_d_e_, directives can reference files having other
  23.        _#_i_n_c_l_u_d_e directives, and parsing will occur in these files
  24.        as well.
  25.  
  26.        Every  file  that a _s_o_u_r_c_e_f_i_l_e includes, directly or indi-
  27.        rectly, is what    mmaakkeeddeeppeenndd  calls  a  _d_e_p_e_n_d_e_n_c_y_.   These
  28.        dependencies  are then written to a _m_a_k_e_f_i_l_e in such a way
  29.        that mmaakkee((11)) will know which object files must  be  recom-
  30.        piled when a dependency has changed.
  31.  
  32.        By default, mmaakkeeddeeppeenndd places its output in the file named
  33.        _m_a_k_e_f_i_l_e if it exists, otherwise _M_a_k_e_f_i_l_e_.   An    alternate
  34.        makefile     may  be  specified with the --ff option.     It first
  35.        searches the makefile for the line
  36.  
  37.        # DO NOT DELETE THIS LINE -- make  depend  depends  on
  38.        it.
  39.  
  40.        or one provided with the --ss option, as a delimiter for the
  41.        dependency output.  If it finds it, it will delete  every-
  42.        thing  following     this  to the end of the makefile and put
  43.        the output after this line.  If it doesn't  find     it,  the
  44.        program    will append the string to the end of the makefile
  45.        and place the output following that.  For each  _s_o_u_r_c_e_f_i_l_e
  46.        appearing  on  the  command line, mmaakkeeddeeppeenndd puts lines in
  47.        the makefile of the form
  48.  
  49.         sourcefile.o: dfile ...
  50.  
  51.        Where _s_o_u_r_c_e_f_i_l_e_._o is the name from the command line  with
  52.        its suffix replaced with ``.o'', and _d_f_i_l_e is a dependency
  53.        discovered in a _#_i_n_c_l_u_d_e directive while     parsing  _s_o_u_r_c_e_-
  54.        _f_i_l_e or one of the files it included.
  55.  
  56. EEXXAAMMPPLLEE
  57.        Normally,  mmaakkeeddeeppeenndd will be used in a makefile target so
  58.        that typing ``make depend'' will bring the dependencies up
  59.        to date for the makefile.  For example,
  60.        SRCS = file1.c file2.c ...
  61.  
  62.  
  63.  
  64. X Version 11           Release 6.1                1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. MAKEDEPEND(1)                        MAKEDEPEND(1)
  71.  
  72.  
  73.        CFLAGS = -O -DHACK -I../foobar -xyz
  74.        depend:
  75.            makedepend -- $(CFLAGS) -- $(SRCS)
  76.  
  77. OOPPTTIIOONNSS
  78.        The program will ignore any option that it does not under-
  79.        stand so that you may use  the  same  arguments    that  you
  80.        would for cccc((11))..
  81.  
  82.        --DD_n_a_m_e==_d_e_f or --DD_n_a_m_e
  83.         Define.  This places a definition for _n_a_m_e in mmaakkeeddee--
  84.         ppeenndd''ss symbol table.  Without _=_d_e_f the symbol becomes
  85.         defined as ``1''.
  86.  
  87.        --II_i_n_c_l_u_d_e_d_i_r
  88.         Include  directory.      This option tells mmaakkeeddeeppeenndd to
  89.         prepend _i_n_c_l_u_d_e_d_i_r to  its    list  of  directories  to
  90.         search  when  it encounters a _#_i_n_c_l_u_d_e directive.  By
  91.         default,  mmaakkeeddeeppeenndd  only    searches   the     standard
  92.         include  directories (usually /usr/include and possi-
  93.         bly a compiler-dependent directory).
  94.  
  95.        --YY_i_n_c_l_u_d_e_d_i_r
  96.         Replace all of the standard include directories  with
  97.         the     single specified include directory; you can omit
  98.         the _i_n_c_l_u_d_e_d_i_r to simply prevent searching the  stan-
  99.         dard include directories.
  100.  
  101.        --aa   Append  the     dependencies  to  the    end  of     the file
  102.         instead of replacing them.
  103.  
  104.        --ff_m_a_k_e_f_i_l_e
  105.         Filename.  This allows you to  specify  an    alternate
  106.         makefile  in  which     mmaakkeeddeeppeenndd can place its output.
  107.         Specifying ``-'' as the file name (i.e.,  --ff--)  sends
  108.         the output to standard output instead of modifying an
  109.         existing file.
  110.  
  111.        --oo_o_b_j_s_u_f_f_i_x
  112.         Object file suffix.     Some  systems    may  have  object
  113.         files  whose  suffix  is something other than ``.o''.
  114.         This option allows you  to    specify     another  suffix,
  115.         such  as ``.b'' with _-_o_._b or ``:obj'' with _-_o_:_o_b_j and
  116.         so forth.
  117.  
  118.        --pp_o_b_j_p_r_e_f_i_x
  119.         Object file prefix.     The prefix is prepended  to  the
  120.         name of the object file. This is usually used to des-
  121.         ignate a different directory  for  the  object  file.
  122.         The default is the empty string.
  123.  
  124.        --ss_s_t_r_i_n_g
  125.         Starting  string  delimiter.  This option permits you
  126.         to specify a different string for mmaakkeeddeeppeenndd to  look
  127.  
  128.  
  129.  
  130. X Version 11           Release 6.1                2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. MAKEDEPEND(1)                        MAKEDEPEND(1)
  137.  
  138.  
  139.         for in the makefile.
  140.  
  141.        --ww_w_i_d_t_h
  142.         Line  width.   Normally,  mmaakkeeddeeppeenndd will ensure that
  143.         every output line that it writes  will  be    no  wider
  144.         than 78 characters for the sake of readability.  This
  145.         option enables you to change this width.
  146.  
  147.        --vv   Verbose operation.    This option causes mmaakkeeddeeppeenndd  to
  148.         emit the list of files included by each input file on
  149.         standard output.
  150.  
  151.        --mm   Warn about multiple inclusion.   This  option  causes
  152.         mmaakkeeddeeppeenndd    to  produce  a    warning if any input file
  153.         includes another file more than  once.   In     previous
  154.         versions of mmaakkeeddeeppeenndd this was the default behavior;
  155.         the default has been  changed  to  better  match  the
  156.         behavior  of  the C compiler, which does not consider
  157.         multiple inclusion to be an error.     This  option  is
  158.         provided  for  backward  compatibility, and to aid in
  159.         debugging problems related to multiple inclusion.
  160.  
  161.        ---- _o_p_t_i_o_n_s ----
  162.         If mmaakkeeddeeppeenndd encounters a double hyphen (--) in  the
  163.         argument list, then any unrecognized argument follow-
  164.         ing it will be  silently  ignored;    a  second  double
  165.         hyphen  terminates    this  special treatment.  In this
  166.         way, mmaakkeeddeeppeenndd can be made to safely ignore esoteric
  167.         compiler  arguments that might normally be found in a
  168.         CFLAGS mmaakkee macro (see the    EEXXAAMMPPLLEE     section  above).
  169.         All     options  that    mmaakkeeddeeppeenndd  recognizes and appear
  170.         between the pair of double hyphens are processed nor-
  171.         mally.
  172.  
  173. AALLGGOORRIITTHHMM
  174.        The  approach  used  in    this program enables it to run an
  175.        order of magnitude faster than any other ``dependency gen-
  176.        erator''     I  have  ever seen.  Central to this performance
  177.        are two assumptions: that all files compiled by    a  single
  178.        makefile     will be compiled with roughly the same _-_I and _-_D
  179.        options; and that most files in a  single  directory  will
  180.        include largely the same files.
  181.  
  182.        Given  these  assumptions, mmaakkeeddeeppeenndd expects to be called
  183.        once for each makefile, with all     source     files    that  are
  184.        maintained  by the makefile appearing on the command line.
  185.        It parses each source and include file exactly once, main-
  186.        taining    an  internal  symbol  table  for each.    Thus, the
  187.        first file on the command line will take an amount of time
  188.        proportional to the amount of time that a normal C prepro-
  189.        cessor takes.  But on subsequent files, if  it  encounters
  190.        an  include  file  that it has already parsed, it does not
  191.        parse it again.
  192.  
  193.  
  194.  
  195.  
  196. X Version 11           Release 6.1                3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. MAKEDEPEND(1)                        MAKEDEPEND(1)
  203.  
  204.  
  205.        For example, imagine you are compiling two files,  _f_i_l_e_1_._c
  206.        and  _f_i_l_e_2_._c_,  they each include the header file _h_e_a_d_e_r_._h_,
  207.        and the file _h_e_a_d_e_r_._h in turn includes  the  files  _d_e_f_1_._h
  208.        and _d_e_f_2_._h_.  When you run the command
  209.  
  210.        makedepend file1.c file2.c
  211.  
  212.        mmaakkeeddeeppeenndd  will     parse _f_i_l_e_1_._c and consequently, _h_e_a_d_e_r_._h
  213.        and then _d_e_f_1_._h and _d_e_f_2_._h_.   It     then  decides    that  the
  214.        dependencies for this file are
  215.  
  216.        file1.o: header.h def1.h def2.h
  217.  
  218.        But when the program parses _f_i_l_e_2_._c and discovers that it,
  219.        too, includes _h_e_a_d_e_r_._h_, it does not parse  the  file,  but
  220.        simply  adds  _h_e_a_d_e_r_._h_,    _d_e_f_1_._h    and _d_e_f_2_._h to the list of
  221.        dependencies for _f_i_l_e_2_._o_.
  222.  
  223. SSEEEE AALLSSOO
  224.        cc(1), make(1)
  225.  
  226. BBUUGGSS
  227.        mmaakkeeddeeppeenndd parses, but does not    currently  evaluate,  the
  228.        SVR4  #predicate(token-list) preprocessor expression; such
  229.        expressions are simply assumed to be true.  This may cause
  230.        the wrong _#_i_n_c_l_u_d_e directives to be evaluated.
  231.  
  232.        Imagine    you  are  parsing  two    files,    say  _f_i_l_e_1_._c  and
  233.        _f_i_l_e_2_._c_, each includes the file _d_e_f_._h_.  The list of  files
  234.        that _d_e_f_._h includes might truly be different when _d_e_f_._h is
  235.        included by _f_i_l_e_1_._c than when it is included  by     _f_i_l_e_2_._c_.
  236.        But  once mmaakkeeddeeppeenndd arrives at a list of dependencies for
  237.        a file, it is cast in concrete.
  238.  
  239. AAUUTTHHOORR
  240.        Todd Brunhoff, Tektronix, Inc. and MIT Project Athena
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262. X Version 11           Release 6.1                4
  263.  
  264.  
  265.