Maybe the below makes sense for some reason I don't understand but it
sure seems weird.
Seems like $< ends up with a different value depending on where the
request for the target comes from:

$ ls
Makefile
$ cat Makefile
OBJS = foo.o

FC = cp # Fake Compile
FL = cp # Fake Link

vpath %.o objdir

%.o: %.c
        $(FC) $< objdir/$@

foo: foo.o
        $(FL) $< $@

clean:
        rm -f *.o
        rm -f objdir/*.o
        rm foo
$ mkdir objdir
$ touch foo.c
$ make foo.o
cp  foo.c objdir/foo.o
$ make foo
cp  objdir/foo.o foo
$ make clean
rm -f *.o
rm -f objdir/*.o
rm foo
$ make foo
cp  foo.c objdir/foo.o
cp  foo.o foo
cp: cannot stat 'foo.o': No such file or directory
make: *** [Makefile:12: foo] Error 1
2 $

Reply via email to