(automake-1.16.info)Debugging Make Rules
27.11 Debugging Make Rules
==========================
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
(Note: (make)Options Summary), here’s a couple of further hints for
debugging makefiles generated by ‘automake’ effectively:
• If less verbose output has been enabled in the package with the use
of silent rules (Note: Automake Silent Rules), you can use ‘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}’ (Note: (make)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’ (Note: (make)Remaking
Makefiles).
• ‘make SHELL="/bin/bash -vx"’ can help debug complex rules. Note:
(autoconf)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.
• <http://bashdb.sourceforge.net/remake/> provides a modified GNU
‘make’ command called ‘remake’ that copes with complex GNU
‘make’-specific Makefiles and allows to trace execution, examine
variables, and call rules interactively, much like a debugger.
---------- Footnotes ----------
(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.
automatically generated by info2www version 1.2.2.9