The rules and dependency trees generated by automake can get rather complex, and leave the developer head-scratching when things don't work as expected. Besides the debug options provided by the make command (see Options Summary), here's a couple of further hints for debugging makefiles generated by automake effectively:
make V=1
to see the commands being executed.
make -n
can help show what would be done without actually doing
it. Note however, that this will still execute commands prefixed
with ‘+’, and, when using GNU make, commands that contain
the strings ‘$(MAKE)’ or ‘${MAKE}’ (see Instead of Execution).
Typically, this is helpful to show what recursive rules would do, but it
means that, in your own rules, you should not mix such recursion with
actions that change any files.1 Furthermore, note that GNU make will update
prerequisites for the Makefile file itself even with -n
(see Remaking Makefiles).
make SHELL="/bin/bash -vx"
can help debug complex rules.
See The Make Macro SHELL, for some
portability quirks associated with this construct.
echo 'print: ; @echo "$(VAR)"' | make -f Makefile -f - print
can be handy to examine the expanded value of variables. You may need
to use a target other than ‘print’ if that is already used or a
file with that name exists.
[1] Automake's ‘dist’ and ‘distcheck’ rules had a bug in this regard in that they created directories even with -n, but this has been fixed in Automake 1.11.