Hi, since I didn't get any reaction at all, neither in this mailing list nor at the bug report I created at 'savannah', I'd like to resubmit. Paul possibly has seen this problem before, and may even have a patch available; reports of reproducibility from other platforms might also help narrow down where to look. I all doesn't help, I'll have to dig down the code. I know it's not a major issue here, but I need consistent behavior in my makefiles, either way.
Thanks again, Johan Bezem CSK Software AG Johan Bezem wrote: > > Hi, > > using make 3.79.1 on multiple platforms, I've discovered a bahavior of make that I >cannot explain: > When intermediates are created using a pattern rule with multiple targets, only the >first (intermediate) target to be created is deleted after the processing has ended. > As an example, I have a 'file.input' with arbitrary contents, and I'm using the >following makefile: > > # The next line can be a workaround in some cases > # but no wildcard like %.int is allowed > #.INTERMEDIATE: file.int file-nodelete.int > > all: file.out file-nodelete.out > > %.out: %.int > cat $< > $@ > > %-nodelete.int %.int: %.input > echo "intfile, target $(subst -nodelete,,$*).int" > $(subst >-nodelete,,$*).int > echo "intfile nodelete, target $(subst -nodelete,,$*)-nodelete.int" > >$(subst -nodelete,,$*)-nodelete.int > > clean: > rm -f *.int *.out > > The two 'echo' lines will possibly get mangled by my/your mail client, but I hope >the intention is clear. > Since 'file.out' is the first prerequisite of target 'all', the intermediate >'file.int' is created first, but the commands for it also create 'file-nodelete.int' >in the process. The commands are - correctly - executed only once. > Now, if 'file-nodelete.out' would not be a prerequisite of all, 'file-nodelete.int' >would arguably not be deleted afterwards, possibly since make doesn't retain any >knowledge about files it doesn't need. > However, since 'file-nodelete.int' is a required intermediate file, I would expect >it to be deleted after the process, just like 'file.int' is. The output of running >make, however, reads like this: > > [jbezem] darkstar:TmpTest/$ make -f Makefile-indirect > echo "intfile, target file.int" > file.int > echo "intfile nodelete, target file-nodelete.int" > file-nodelete.int > cat file.int > file.out > rm file.int > > I've tested this both on Windows NT4, using CygWin 1.3.10, make 3.79.1-5, and on >Solaris 2.7, make 3.79.1. > The inclusion of the special target name '.INTERMEDIATE' for all *.int files induces >make to delete both files, however, wildcards are not supported... I couldn't find >anything in the archives or the manual, either. > > Is this a true bug, or can someone teach me how to RTFM? > > Ciao, > > Johan Bezem > CSK Software AG _______________________________________________ Bug-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-make