Next: , Previous: Interrupts, Up: Commands


5.7 Recursive Use of make

Recursive use of make means using make as a command in a makefile. This technique has been used to separate makefiles for various subsystems that compose a larger system. However this can lead to slower makefiles and makefiles which don't work when running make in parallel because of dependencies which span subdirectories. See “Recursive Make Considered Harmfull” by Peter Miller http://aegis.sourceforge.net/auug97.pdf.

However should you decide to go this route (and automake typically does), we'll give an example. Suppose you have a subdirectory subdir which has its own makefile, and you would like the containing directory's makefile to run make on the subdirectory. You can do it by writing this:

     subsystem:
             cd subdir && $(MAKE)

or, equivalently, this (see Summary of Options):

     subsystem:
             $(MAKE) -C subdir

You can write recursive make commands just by copying this example, but there are many things to know about how they work and why, and about how the sub-make relates to the top-level make. You may also find it useful to declare targets that invoke recursive make commands as `.PHONY' (for more discussion on when this is useful, see Phony Targets).

For your convenience, when GNU make starts (after it has processed any -C options) it sets the variable CURDIR to the pathname of the current working directory. This value is never touched by make again: in particular note that if you include files from other directories the value of CURDIR does not change. The value has the same precedence it would have if it were set in the makefile (by default, an environment variable CURDIR will not override this value). Note that setting this variable has no impact on the operation of make (it does not cause make to change its working directory, for example).