Hi,

I have run into something I find strange with GNU Make 3.81 (yes, I know
3.82 is latest but since it's not in EL6, my target platform, I cannot
depend on it's features).

I would think that given the following set of rules:

/tmp/%.foo: %.foo
        echo "foo rule 1"
        touch $@

%.foo:
        echo "foo rule 2"
        touch $@

/tmp/%.bar:
        make $*.bar
        echo "bar rule 1"
        touch $@

%.bar:
        echo "bar rule 2"
        touch $@

Trying to create a target of /tmp/a.foo and /tmp/a.bar should result in
the same rules being run but they don't:

$ ls -l . /tmp/a.bar /tmp/a.foo
ls: cannot access /tmp/a.bar: No such file or directory
ls: cannot access /tmp/a.foo: No such file or directory
.:
total 4
-rw-rw-r--. 1 brian brian 176 Feb 25 08:48 Makefile
$ make /tmp/a.foo
echo "foo rule 2"
foo rule 2
touch /tmp/a.foo
$ make /tmp/a.bar
make a.bar
make[1]: Entering directory `/home/brian/chroma/deps/lustre/test'
echo "bar rule 2"
bar rule 2
touch a.bar
make[1]: Leaving directory `/home/brian/chroma/deps/lustre/test'
echo "bar rule 1"
bar rule 1
touch /tmp/a.bar

It would seem that for the /tmp/a.foo, the "/tmp/%.foo" pattern rule is
not being chosen but for /tmp/a.bar" the "/tmp/%.bar" pattern rule is
being chosen.  The only difference in those choices I can see is that
the "/tmp/%.foo" pattern rule has a prerequisite and the "/tmp/%.bar"
one doesn't.

So the question is, why does a prerequisite change the behavior of
pattern match rules?  I would think the selection of a pattern match
rule would be independent of prerequisites but of course once the
pattern match rule was chosen, the rule for the prerequisite would also
need to be called to ensure it's freshness.

Thoughts?

b.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to