On Wed, 22 Feb 2006, John Graham-Cumming wrote:
> It's a feature/bug.  Basically if you don't add the ; then Make thinks
> there are no commands associated with building foo.h and bar.h and so it
> doesn't check to see if they've been updated (which the were by the
> foobar rule).  This means that the time stamps that GNU Make is keeping
> internally will not match what's on the disk.

Thanks for the detailed explanation.
IMHO, Make could be somewhat smarter.
In the debug output, it says:
    Must remake target `foo.h'.
    Successfully remade target file `foo.h'.
Here Make notices that foo.h is out of date, but has no rules to run.
In this case Make could have a look at the file's timestamp to see
if someone else has updated the file meanwhile.
I see no good reason to have a dependency chain like this otherwise.

I hope nobody ever adds the optimization to Make that an empty
command does nothing and therefore there is no need to stat the
file again. Given this, I am happy with adding a ; to the dependency.

As a wish, I would like to see a small section in the Make manual
explaining what to do in case of a rule that creates multiple targets
and cannot be written using patterns. I think this is not so uncommon.
And none of the solutions posted so far has mentioned the necessary ;.

Thanks,

Alex
-- 
Alexander Frink                      E-Mail: [EMAIL PROTECTED]
Institut fuer Physik                 Phone:  +49-6131-3923391
Johannes-Gutenberg-Universitaet
D-55099 Mainz, Germany



_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make

Reply via email to