Thanks, Noel
Boris Kolpackov wrote:
I will start from the second example:
Noel Yap <[EMAIL PROTECTED]> writes:
But if it's changed to:
.PHONY: all all: aoeu/aoeu.mk
%.mk: %.m cp $(<) $(@)
%/.: mkdir -p $(@)
aoeu/aoeu.mk: aoeu.m | aoeu/.
The output becomes:
$ gmake mkdir -p aoeu/.
If you run this with 'make -r -d' you will see that make didn't find any rules for 'aoeu/aoeu.mk'. The reason why
make didn't complain about it is because make has this
habit of imagining that targets "somehow" get updated.
If I run my -bk-patched make with --no-implicit-phony flag I get the following:
make: *** No rule to make target `aoeu/aoeu.mk', needed by `all'. Stop.
See
http://mail.gnu.org/archive/html/help-make/2004-02/msg00028.html
for more information.
Now let's go to your first example which is quite interesting:
.PHONY: all all: aoeu/aoeu.mk
%.mk: %.mk cp $(<) $(@)
%/.: mkdir -p $(@)
aoeu/aoeu.mk: aoeu.mk | aoeu/.
The output is:
$ gmake gmake: Circular aoeu/aoeu.mk <- aoeu/aoeu.mk dependency dropped. gmake: Circular aoeu.mk <- aoeu.mk dependency dropped. mkdir -p aoeu/. cp aoeu.mk aoeu/aoeu.mk
Again, let's run 'make -r -d' on it. Here is the relevant part of the output:
Considering target file `all'. File `all' does not exist. Considering target file `aoeu/aoeu.mk'. File `aoeu/aoeu.mk' does not exist. Looking for an implicit rule for `aoeu/aoeu.mk'. Trying pattern rule with stem `aoeu'. Trying rule prerequisite `aoeu/aoeu.mk'. Found an implicit rule for `aoeu/aoeu.mk'.
Here make found satisfying implicit rule which looks like this:
aoeu/aoeu.mk: aoeu/aoeu.mk cp $(<) $(@)
But then make drops circular dependency:
make: Circular aoeu/aoeu.mk <- aoeu/aoeu.mk dependency dropped.
Which makes this rules looks like this:
aoeu/aoeu.mk: cp $(<) $(@)
And, finally, make adds dependencies that you specified by hand:
aoeu/aoeu.mk: aoeu.mk | aoeu/. cp $(<) $(@)
Now $< is bound to 'aoeu.mk', $@ - to 'aoeu/aoeu.mk' and you get
cp aoeu.mk aoeu/aoeu.mk.
The funny part is that you would expect '%.mk' to end up in $< but because make dropped it 'aoeu.mk' took its place which happened to be what you actually wanted.
hth, -boris
_______________________________________________ Help-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/help-make
_______________________________________________ Help-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/help-make
