Eddy, thanks again. yes, one should re-read manuals. and, remember what one reads!
> I confess I don't see how a sub-make would really help there. I > generally do my git changes separately from invoking make - and, even > then, incremental builds sometimes require (at least) a purge of > generated dependency files, to force their recreation, since > interdependencies can all too easily have changed - indeed, whole > subdirectories may have been renamed, which is way outside what I would > expect make to cope with. Perhaps others on this list have guidance on > that. see the makefile-prime below. the "all:" target is as before. the "allx:" target runs a sub-make when creating a new input file (outside of make's knowledge). that sub-make creates the required "output" files. then, the "main" make continues to run, to a (presumably) successful conclusion. this works for *my* app. (though, aesthetically, whether to run the sub-make in "something:" or in "processoutputs:" isn't clear; sort of i prefer the latter.) cheers, Greg ---- INDIR = ./inputs OUTDIR = ./outputs INFILES = $(notdir $(shell ls ${INDIR}/*.input)) INFILESASOUT = $(INFILES:.input=.output) OUTFILES = $(addprefix ${OUTDIR}/,$(notdir ${INFILESASOUT})) NEWIN = ${INDIR}/b.input NEWOUT = ${OUTDIR}/b.output ${OUTDIR}/%.output: ${INDIR}/%.input echo creating $(notdir $@) cp -p $< $@ .PHONY: all setup processoutputs something clean all: setup something processoutputs allx: setup something1 processoutputs setup: @for dir in ${OUTDIR} ${INDIR}; do \ if [ ! -e $${dir} ]; then mkdir $${dir}; fi \ done @if [[ -f ${NEWIN} ]]; then \ echo error: "${NEWIN} exists -- run \`make clean\`"; \ exit 1; \ fi # this wants, as dependency, processoutputs: ${OUTFILES} @diff <(for i in ${OUTFILES}; do echo $$i; done) <(ls ${OUTDIR}/*) outfiles: ${OUTFILES} something: @touch ${NEWIN} something1: @touch ${NEWIN} make --no-print-directory outfiles clean: @-rm -f ${OUTFILES} @-rm -f ${NEWIN} ----