[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
make doesn't always reread included makefiles
From: |
Paul Franklin |
Subject: |
make doesn't always reread included makefiles |
Date: |
11 Feb 2003 11:20:51 -0800 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) Emacs/20.4 |
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 <address@hidden>.
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
- make doesn't always reread included makefiles,
Paul Franklin <=