bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

fatal errors for missing include files.


From: Ian Dunbar
Subject: fatal errors for missing include files.
Date: Mon, 30 Aug 2004 20:43:53 +0900

Hi,

I am not totally sure if this is a bug or not. Make's non-fatal warnings
about missing include files seem to become fatal errors when you include
another file from the "includee". I have reduced it to an example as
follows:

~> cat > Makefile
default:

%.mk: %.prj
 cp $< $@

include sub.mk

~> cat > sub.prj
include subsub.mk

~> cat > subsub.prj
# empty

~> make
Makefile:6: sub.mk: No such file or directory
cp sub.prj sub.mk
sub.mk:1: subsub.mk: No such file or directory
cp subsub.prj subsub.mk
make: Nothing to be done for `default'.

So far so good, the behaviour is as I would expect. I checked the database,
and your Bug#102 talks about those warning messages there, but while they
are a bit ugly, and it would be nice if make didn't use the file it knows is
out of date, they are not so big a deal.

Now, I want to remove subsub from the project, so I do this:

~> rm subsub.*
~> cat > sub.prj
# empty

~> make
sub.mk:1: subsub.mk: No such file or directory
make: *** No rule to make target `subsub.mk'.  Stop.

It gives a fatal error. I was going to say that this appears to be contrary
to what the documentation says is the correct behaviour:

"3.3 Including Other Makefiles ... If an included makefile cannot be found
in any of these directories, a warning message is generated, but it is not
an immediately fatal error; processing of the makefile containing the
include continues. Once it has finished reading makefiles, make will try to
remake any that are out of date or don't exist. ..."

Actually though on second thought, maybe it doesn't contradict that
statement. Has it passed the "no fatal errors" stage, and is now trying to
generate all the submakefiles as required by the last part of the statement
"... make will try to remake any that are out of date or don't exist"?

Putting an order-only prerequisite into the original sub.prj will solve it
if you rebuild everything.. I am not overly fond of this solution though
becasue it is one more thing to maintain for each project. Still, it does
work.
~> cat > sub.prj
subsub.mk: | sub.mk
include subsub.mk

I don't know how I would have gotten around it before order only targets
were introduced, so I am still inclinded to think it's a bug. In general,
making the lowest file first seems like unusual behavour. Shouldn't make
know that it should regenerate included files from the top down? It seems
like it is implied by the functionality of the include keyword. Otherwise it
could end up re-generating a lot of unneeded include files. Or is this
intended behaviour? (why?)

Best regards,
Ian


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.745 / Virus Database: 497 - Release Date: 2004/08/27




reply via email to

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