On Fri, Jul 22, 2011 at 09:52:58PM -0700, Philip Guenther wrote:
> On success, A rule *MUST* create the file named by $@.  Telling make
> that you'll create port.o and then creating ${OBJ_DIR}/port.o results
> in *exactly* the behavior you describe: every build regenerates the
> involved file because make doesn't see the file where it's looking.

It's even worse than that.

make has very limited knowledge of the filesystem. Targets such as
./a and a  are distinct, even though they often refer to the same file.

In sequential mode, that's not much of a problem, since make will evaluate
rules one at a time, and most of the time, things will work out just fine.

In parallel mode, this can be a real problem, with exactly the symptoms you
describe, and more...


Actually, that's the main stumbling block I need to fix before make -j is
completely operational, and that's a hard one !

You need to add some kind of "fuzzy" equivalence relations between targets
that ought to be the same, but are not, and you have to be very careful
about it, since usually, make doesn't like to encounter cycles in its
dependency evaluation.

Retrofitting that into the existing engine is complicated and bug-prone.
>From time to time, I think about throwing it away and starting that specific
part from scratch...

Reply via email to