makefilegnu-make

Stop make echoing directory it enters / exits


I have a Makefile that traverses a list of directories, which works fine, however i want to not get the Entering/Leaving info message like below:

make[1]: Leaving directory `/home/zzz/aaa/bbb/ccc'

The bit of code that does the traversal (where ccc is one of the dirs in the SUBDIRS list and Makefile is in the bbb dir) is here:

@for i in $(SUBDIRS); do \
(cd $$i; make $@); \
done

I am guessing something needs doing with the (cd $$i; make $@) part, but cannot figure out what.

Thanks


Solution

  • GNU make decides whether to print this information according to the MAKELEVEL: if it is set and > 0 then it prints the info. You can unset or fake a zero MAKELEVEL, so GNU make thinks it is the initial invokation.

    @for i in $(SUBDIRS); do \
        (cd $$i; unset MAKELEVEL; make $@); \
    done
    

    should do the trick.

    On the other hand, Recursive make considered harmful (google it). If you can, avoid it.

    EDIT: As bobbogo points out, there is a GNU make option --no-print-directory; this is much better than my hack above.