PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Makefile



ThorstenHirsch
30-05-2005, 13:54
Servus!

Ich komme mit meinem Makefile nicht so recht weiter. So sieht's bisher aus:


SRC=$(PWD)
DEST=/target
FILES=$(wildcard S_*.pl)

all: $(FILES)
cd $(DEST); $(SRC)/meinProgramm.pl $<

Und zwar soll mein Programm alle Dateien S_*.pl in dem Verzeichnis durchgehen, in dem das Makefile steht und mit meinProgramm (im gleichen Verzeichnis) aufrufen und anschließend in das Verzeichnis $DEST bewegen.

Leider wird nur die allererste Datei, die S_*.pl entspricht, aufgerufen.
Außerdem weiß ich nicht, ob das überhaupt so klappt mit dem Quell- und dem Zielverzeichnis, denn die Quelldateien sollen ja nicht überschrieben werden. Ich hab mir gedacht, dass es in etwa so besser wäre:

Quelldatei: S_hans.pl
Aufruf: ./meinProgramm.pl S_hans.pl
dabei kommt heraus: S_hans
und diese wird bewegt nach $(DEST)

Wie kann ich das bewerkstelligen?

Gruß
Thorsten

Joghurt
30-05-2005, 15:12
IIRC: Du musst eine subshell starten, damit du nicht für immer das Verzeichnis wechselst
foo: a b c
cd bar; foo $<wechselt bei a nach bar und bleibt da auch, auch wenn b aufgerufen wird, also

foo: a b c
(cd bar; foo $<)

ThorstenHirsch
30-05-2005, 16:44
Danke für die Antwort, aber das hat leider gar nix gebracht. :(

ThorstenHirsch
31-05-2005, 10:11
Nächster Versuch:


FILES := $(wildcard S_*.pl)
TARGETS := $(patsubst S_%,T_%,$(FILES))

$(TARGETS) : $(FILES)
./meinProgramm.pl $<

Problem ist immer noch dass nur die erste Datei, auf die das Pattern S_*.pl zutrifft, mit ./meinProgramm aufgerufen wird. Es soll aber ./meinProgramm für jede Datei, auf die S_*.pl zutrifft, (einzeln) aufgerufen werden.

ThorstenHirsch
31-05-2005, 10:28
Yes! Ich hab's:

FILES = $(wildcard S_*.pl)

all default : $(patsubst S_%,T_%,$(FILES))

T_%.pl : S_%.pl
@./meinProgramm.pl $<

clean :
@[ ! -f T_*.pl ] || rm T_*.pl