bug-make
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]