Subject: Re: make seems to find the wrong source file
To: Greywolf <greywolf@starwolf.com>
From: Simon J. Gerraty <sjg@crufty.net>
List: tech-toolchain
Date: 01/11/2004 17:26:16
If you use the actual example that David provided - it behaves exactly
as he described:
$ cat /homes/sjg/make-tests/x1
.SUFFIXES:
.SUFFIXES: .a .b
all: x.b
.a.b:
@echo "$< -> $@"
x.b: dir/x.a
$ mkdir dir; echo hi > dir/x.a
$ make -f /homes/sjg/make-tests/x1 x.b
dir/x.a -> x.b
'.' happens to be a bad choice for a value of dir, since in several
places make understands what ./ is.
>It doesn't appear that it will ever build x.a at all unless you have
>an explicit rule for generating it; your ".a.b" rule says "This is how
>I translate .a files into .b files". Did you, perhaps, mean that it
>would build x.b, not y.b, using the commands from the suffix rule?
>If so, I beg to differ:
If you add an explicit rule for x.b though:
$ cat <<! >> /homes/sjg/make-tests/x1
x.b:
@echo "Make $@ from $?"
$ make -f /homes/sjg/make-tests/x1 x.b
Make x.b from dir/x.a
$
FWIW for the same makefile, gmake will say (without the explicit rule):
gmake: Nothing to be done for `x.b'.
but with the explicit rule it behaves the same as our make.
--sjg