Under certain circumstances, make fails to notice that one or more included makefiles have changed and does not restart and reread makefiles.
Here's the best I could do at minimizing this... $ make --version GNU Make version 3.79.1, by Richard Stallman and Roland McGrath. Built for i686-pc-linux-gnu Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Report bugs to <[EMAIL PROTECTED]>. I've reproduced this on the same machine with GNU Make 3.78.1, 3.79.1, and 3.80, and on GNU Make version 3.79.1 under i386--netbsdelf. Reproduce by placing the file at the bottom in its own directory as "Makefile". The directory should be otherwise empty. Because there's an important tab in this file in the *middle* of a line, I've also made it available via http, at http://www.byz.org/~paul/gnu/buggy-Makefile.txt It should successfully echo "hello"; however, from a clean directory, it requires two runs: $ make Makefile:14: Make.a: No such file or directory echo making a making a rm -f Make.a (echo 'hello:' ; echo ' echo hello') > Make.a echo pretending to make b pretending to make b make: *** No rule to make target `hello', needed by `default'. Stop. $ make echo pretending to make b pretending to make b echo hello hello $ I expected make to automatically restart between the two "pretending to make b" sequences, producing a sequence roughly like: $ make Makefile:14: Make.a: No such file or directory echo making a making a rm -f Make.a (echo 'hello:' ; echo ' echo hello') > Make.a echo pretending to make b pretending to make b echo pretending to make b pretending to make b echo hello hello $ --Paul # bug reproduced with GNU Make 3.78.1, 3.79.1, 3.80 on Linux/2.4.18 # and on GNU Make version 3.79.1 on i386--netbsdelf # # make clean; make # should do some stuff, ending with "hello" on its own line. # Instead, it errors. # Typing make a second time produces the desired result. # # Removing the dependency between Make.b and Make.a # makes the problem go away. default: hello include Make.a Make.a: echo making a rm -f $@ (echo 'hello:' ; echo ' echo hello') > $@ # The line above this line has a tab in it at the beginning of the second # quoted string, so "echo hello" will be indented with a tab in Make.a. -include Make.b Make.b: Make.a echo pretending to make b clean: rm -f Make.a Make.b _______________________________________________ Bug-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-make