[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
VPATH file rename is not detected by $<
From: |
Bauernberger, Joachim (EXT-Other - DE/Ulm) |
Subject: |
VPATH file rename is not detected by $< |
Date: |
Wed, 8 Jun 2011 21:09:46 +0200 |
Hi,
sorry for the bother, I checked the archives but have not found an
answer.
If there is already a solution please kindly point me to it.
Here is the situation: If a source file is renamed and moved from one
VPATH to another then $< still points to the old (previous) path. It
detects that it no longer exists at the previous location but $< is
still pointing to it.
Please consider the attached minimalistic test case. It creates a
directory called test/ in your CWD (and removes it if already present so
please beware before running it)
Cheers,
Joachim
8<---------SNIP---------8<---------SNIP---------8<---------SNIP---------
#!/bin/bash
rm -rf test
mkdir -p test/src/a test/src/b test/res
cat > test/src/a/foo.c <<'EOF'
#include <stdio.h>
int main() {
printf("CMD\n");
return 0;
}
EOF
cat > test/Makefile <<'EOF'
all: foo
VPATH = src/a src/b res
foo: res/foo.o
$(CC) -o $@ $<
res/%.o: %.c
$(info found $<, actual $(wildcard src/*/*.c))
$(CC) -o $@ -c $< -Wp,-MD,address@hidden; \
perl -ne 'print $$_; $$_ =~ s/.*: //; push @a, $$_; END {
$$a[-1] =~ s/$$/ :/; print join("", @a, ); }' address@hidden > address@hidden
include $(wildcard res/*.d.cmd)
EOF
cat > test/mine.out <<EOF
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-redhat-linux-gnu
First build works
found src/a/foo.c, actual src/a/foo.c
cc -o res/foo.o -c src/a/foo.c -Wp,-MD,res/foo.o.d; \
perl -ne 'print $_; $_ =~ s/.*: //; push @a, $_; END { $a[-1]
=~ s/$/ :/; print join("", @a, ); }' res/foo.o.d > res/foo.o.d.cmd
cc -o foo res/foo.o
mv src/a/foo.c src/b/foo.c
Second build fails
found src/a/foo.c, actual src/b/foo.c
cc -o res/foo.o -c src/a/foo.c -Wp,-MD,res/foo.o.d; \
perl -ne 'print $_; $_ =~ s/.*: //; push @a, $_; END { $a[-1]
=~ s/$/ :/; print join("", @a, ); }' res/foo.o.d > res/foo.o.d.cmd
cc: src/a/foo.c: No such file or directory
cc: no input files
EOF
cd test
make --version
echo
echo -------------------------------------------- First build works
echo
make
echo
echo -------------------------------------------- mv src/a/foo.c
src/b/foo.c
echo
mv src/a/foo.c src/b/foo.c
echo -------------------------------------------- Second build fails
echo
make
echo
echo -------------------------------------------- Please compare your
results with mine in test/mine.out
echo
- VPATH file rename is not detected by $<,
Bauernberger, Joachim (EXT-Other - DE/Ulm) <=