remake
remake copied to clipboard
Stepping through macro expansions
Related to https://github.com/rocky/remake/issues/123 ,
I want to debug the following Makefile; the make-dirs call expands to nothing:
define _make-dir
$1/.dum: $(not-dir $1)/.dum
mkdir $(dir $@)
touch $(dir $@)/.dum
endef
# we dont try to create/depend on /.dum
define make-dir
$(if $(not-dir $1),$(call _make-dir,$1),)
endef
$(call make-dir,test/)
I've skimmed through the manual earlier and looked through the in-REPL documentation, maybe I'm missing something but
- I don't see any way to step through macro expansions
- I don't see a way to dump the contents of the file after expansion
- are there other techniques for debugging macros? Are there any existing solutions to these, or are there features that could be implemented?
I'm currently trying to find a workaround by trying to write a $(call trace,...) function that can be inserted in a nested expansion, similar to trace functions in functional programming languages; it prints the value it is passed and then returns it; but I'm not very good at make programming yet.
Another possibility might be to
- use the gmake guile integration
- use GDB with debug symbols enabled, if there is a function corresponding to "return the value of an expansion", and if I can find said function
https://github.com/rocky/remake/pull/125 implements the fourth (not explicitly listed previously because I thought it would be a lot harder) option: implementing the trace builtin.
However, having the ability to step through expansions would still be helpful because it doesn't require modifying the Makefile.