Search code examples
makefile

How to combine makefiles?


I encountered a software that had three makefiles, one in the root directory and two in immediate subdirectories. Experimenting a bit it turned out that there is a good order of them:

$ make -C wordn all
$ make -C buses all
$ make all

from the root directory. What is an elegant way to rewrite the main makefile so that this sequence happens?


Solution

  • In the target all of the main Makefile you can add:

    all:
        $(MAKE) -C wordn all
        $(MAKE) -C buses all
        ...
    

    This will execute the submake before doing the all commands.

    You can also create a dependency of the main all target:

    all: suball
        ...
    
    suball:
        $(MAKE) -C wordn all
        $(MAKE) -C buses all
    
    .PHONY: suball
    

    The suball target must be a PHONY target as it is a virtual target