Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RMKDEPEND(1)		    General Commands Manual		  RMKDEPEND(1)

NAME
       rmkdepend - create dependencies in makefiles (ROOT Version)

SYNOPSIS
       rmkdepend [ -Dname=def ]	[ -Dname ] [ -Iincludedir ] [ -Yincludedir ] [
       -a  ]  [	 -fmakefile  ]	[ -oobjsuffix ]	[ -pobjprefix ]	[ -sstring ] [
       -wwidth ] [ -v ]	[ -m ] [ -- otheroptions -- ] sourcefile  [  -ttarget-
       filename	] ...

DESCRIPTION
       The  rmkdepend  program reads each sourcefile in	sequence and parses it
       like  a	C-preprocessor,	 processing  all  #include,  #define,  #undef,
       #ifdef, #ifndef,	#endif,	#if, #elif and #else directives	so that	it can
       correctly  tell	which #include,	directives would be used in a compila-
       tion.  Any #include, directives can reference files having  other  #in-
       clude directives, and parsing will occur	in these files as well.

       Every  file that	a sourcefile includes, directly	or indirectly, is what
       rmkdepend calls a dependency.  These dependencies are then written to a
       makefile	in such	a way that make(1) will	know which object  files  must
       be recompiled when a dependency has changed.

       By  default,  rmkdepend places its output in the	file named makefile if
       it exists, otherwise Makefile.  An alternate makefile may be  specified
       with the	-f option.  It first searches the makefile for the line

	   # DO	NOT DELETE THIS	LINE --	make depend depends on it.

       or  one	provided with the -s option, as	a delimiter for	the dependency
       output.	If it finds it,	it will	delete everything  following  this  to
       the  end	 of  the  makefile  and	put the	output after this line.	 If it
       doesn't find it,	the program will append	the string to the end  of  the
       makefile	 and place the output following	that.  For each	sourcefile ap-
       pearing on the command line, rmkdepend puts lines in  the  makefile  of
       the form

	    sourcefile.o: dfile	...

       Where  sourcefile.o  is	the name from the command line with its	suffix
       replaced	with ``.o'', and dfile is a dependency discovered  in  a  #in-
       clude  directive	 while	parsing	 sourcefile or one of the files	it in-
       cluded.

NOTE
       The rmkdepend application is based on makedepend(1) from	the X  Consor-
       tium,  but  modified slightly to	fit the	needs of the ROOT system. This
       man(1) page is more or less identical to	the manpage for	makedepend(1),
       except for this notice, and the SEE ALSO	and AUTHORS  sections.

EXAMPLE
       Normally, rmkdepend will	be used	in a makefile target  so  that	typing
       ``make  depend''	 will  bring the dependencies up to date for the make-
       file.  For example,
	   SRCS	= file1.c file2.c ...
	   CFLAGS = -O -DHACK -I../foobar -xyz
	   depend:
		   rmkdepend --	$(CFLAGS) -- $(SRCS)

OPTIONS
       The program will	ignore any option that it does not understand so  that
       you may use the same arguments that you would for cc(1).

       -Dname=def or -Dname
	    Define.   This  places a definition	for name in rmkdepend's	symbol
	    table.  Without =def the symbol becomes defined as ``1''.

       -Iincludedir
	    Include directory.	This option tells  rmkdepend  to  prepend  in-
	    cludedir to	its list of directories	to search when it encounters a
	    #include directive.	 By default, rmkdepend only searches the stan-
	    dard include directories (usually /usr/include and possibly	a com-
	    piler-dependent directory).

       -Yincludedir
	    Replace  all  of  the standard include directories with the	single
	    specified include directory; you can omit the includedir to	simply
	    prevent searching the standard include directories.

       -a   Append the dependencies to the end of the file instead of  replac-
	    ing	them.

       -fmakefile
	    Filename.	This  allows  you  to specify an alternate makefile in
	    which rmkdepend can	place its output.   Specifying	``-''  as  the
	    file  name (i.e., -f-) sends the output to standard	output instead
	    of modifying an existing file.

       -oobjsuffix
	    Object file	suffix.	 Some systems may have object files whose suf-
	    fix	is something other than	``.o''.	 This  option  allows  you  to
	    specify  another suffix, such as ``.b'' with -o.b or ``:obj'' with
	    -o:obj and so forth.

       -pobjprefix
	    Object file	prefix.	 The prefix is prepended to the	 name  of  the
	    object  file. This is usually used to designate a different	direc-
	    tory for the object	file.  The default is the empty	string.

       -sstring
	    Starting string delimiter.	This option permits you	to  specify  a
	    different string for rmkdepend to look for in the makefile.

       -wwidth
	    Line  width.   Normally,  rmkdepend	 will ensure that every	output
	    line that it writes	will be	no wider than 78  characters  for  the
	    sake  of  readability.   This  option  enables  you	to change this
	    width.

       -v   Verbose operation.	This option causes rmkdepend to	emit the  list
	    of files included by each input file on standard output.

       -m   Warn  about	 multiple  inclusion.  This option causes rmkdepend to
	    produce a warning if any input file	 includes  another  file  more
	    than once.	In previous versions of	rmkdepend this was the default
	    behavior;  the default has been changed to better match the	behav-
	    ior	of the C compiler, which does not consider multiple  inclusion
	    to	be an error.  This option is provided for backward compatibil-
	    ity, and to	aid in debugging problems related to  multiple	inclu-
	    sion.

       -- options --
	    If rmkdepend encounters a double hyphen (--) in the	argument list,
	    then  any  unrecognized argument following it will be silently ig-
	    nored; a second double hyphen terminates this  special  treatment.
	    In	this way, rmkdepend can	be made	to safely ignore esoteric com-
	    piler arguments that might normally	be  found  in  a  CFLAGS  make
	    macro (see the EXAMPLE section above).  All	options	that rmkdepend
	    recognizes	and  appear  between  the  pair	 of double hyphens are
	    processed normally.

       -ttargetfilename
	    Filename.  This allows you to specify an alternate target filename
	    to be use for the preceding	file.  For example if you call

		 rmkdepend -sobj -pbuild file.cxx -tlibrary.so

	    rather than	inserting the line

		 build/file.obj: ...

	    rmkdepend will insert:

		 library.so: ...

ALGORITHM
       The approach used in this program enables it to run an order of	magni-
       tude  faster  than any other ``dependency generator'' I have ever seen.
       Central to this performance are two assumptions:	that  all  files  com-
       piled  by  a  single makefile will be compiled with roughly the same -I
       and -D options; and that	most files in a	single directory will  include
       largely the same	files.

       Given  these  assumptions, rmkdepend expects to be called once for each
       makefile, with all source files that are	maintained by the makefile ap-
       pearing on the command line.  It	parses each source  and	 include  file
       exactly once, maintaining 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.  But on sub-
       sequent files, if it encounters an include 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,
       they each include the header file header.h, and the  file  header.h  in
       turn includes the files def1.h and def2.h.  When	you run	the command

	   rmkdepend file1.c file2.c

       rmkdepend will parse file1.c and	consequently, header.h and then	def1.h
       and def2.h.  It then decides that the dependencies for this file	are

	   file1.o: header.h def1.h def2.h

       But  when  the  program	parses file2.c and discovers that it, too, in-
       cludes header.h,	it does	not parse the file, but	simply adds  header.h,
       def1.h and def2.h to the	list of	dependencies for file2.o.

SEE ALSO
       cc(1), make(1), root(1),	root-cint(1)

       See also	the ROOT webpages: http://root.cern <http://root.cern>

BUGS
       rmkdepend  parses,  but	does  not currently evaluate, the SVR4 #predi-
       cate(token-list)	preprocessor expression; such expressions  are	simply
       assumed to be true.  This may cause the wrong #include directives to be
       evaluated.

       Imagine	you  are  parsing two files, say file1.c and file2.c, each in-
       cludes the file def.h.  The list	of files  that	def.h  includes	 might
       truly  be  different  when def.h	is included by file1.c than when it is
       included	by file2.c.  But once rmkdepend	arrives	at a list of dependen-
       cies for	a file,	it is cast in concrete.

AUTHOR
       Todd Brunhoff, Tektronix, Inc. and  MIT	Project	 Athena.  Modified  by
       Christian Holm Christensen <cholm@nbi.dk> for the ROOT distribution.

4th Berkeley Distribution	   Version 3			  RMKDEPEND(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rmkdepend&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help