Preserve intermediate targets in chains of implicit rules in makefiles
October 31, 2012in chains of implicit rules such as for example
test.in:
touch test.in
%.intermediate: %.in
touch $@
%.out: %.intermediate
touch $@
the command
make test.out
results in the following output
touch test.in
touch test.intermediate
touch test.out
rm test.intermediate
so test.intermediate
is deleted since make
considers it a
by-product. The .SECONDARY
target can be used to instruct make to
keep such intermediate files. If the target is left without
pre-requisites, all intermediate files will be preserved. Otherwise a
list of files can be provided. As far as i know, patterns are not
allowed. The resulting make file then should look like this
.SECONDARY:
test.in:
touch test.in
%.intermediate: %.in
touch $@
%.out: %.intermediate
touch $@
to preserve all intermediate files. Or like this to preserve specific intermediate files:
.SECONDARY: test.intermediate
test.in:
touch test.in
%.intermediate: %.in
touch $@
%.out: %.intermediate
touch $@