Schrift
[thread]10179[/thread]

makefile: alle Dateien einey Typs



<< >> 8 Einträge, 1 Seite
pktm
 2007-08-22 21:51
#98535 #98535
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie kann in in einem makefile alle Dateien eines Typs ansprechen?
Ich habe da z.Zt. eine Reihe von .fsa-Dateien, die ich gerne mittels des befehls
Code: (dl )
fsmdraw -i morph.lab dateiname.fsa | dot -Tps > dateiname.ps 

umwandeln möchte.

Ich habe auch ein bischen gegoogelt und sowas gefunden, aber das klappt nicht:
Code: (dl )
1
2
3
all: $(patsubst %.fsa, %.ps, $(wildcard *.fsa))
%.ps: %.fsa
fsmdraw -i morph.lab $^ | dot -Tps > $^


Fehler:
Code: (dl )
1
2
3
%ps: %fsa
make: %ps:: command not found
make: *** [all] Error 127


Ich arbeite unter cygwin.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
murphy
 2007-08-23 17:45
#98576 #98576
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Bei den meisten Make-Implementationen ist in Makefiles die Einrückung kritisch! Das Muster der Regel muss am Anfang der Zeile beginnen und alle Kommandos für die Regel müssen ohne Leerzeilen dazwischen direkt auf das Muster folgen sowie jeweils durch genau ein horizontales Tabulatorzeichen eingerückt sein.

Folgendes funktioniert zum Beispiel mit GNU Make einwandfrei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
# Konfigurierbare Programm- und Dateipfade
FSMDRAW=fsmdraw
DOT=dot

MORPH=morph.lab

# Startregel (kein Dateiziel, daher als PHONY markiert)
.PHONY: all
all: $(patsubst %.fsa, %.ps, $(wildcard *.fsa))

# Musterregel fsa -> ps
%.ps: %.fsa
$(FSMDRAW) -i $(MORPH) $^ | $(DOT) -Tps >$@


(edit: Scheinbar ist am Forum etwas kaputt, was alle Zeilenumbrüche im Codeblock verdoppelt -- das ist keine Absicht!)
When C++ is your hammer, every problem looks like your thumb.
ptk
 2007-08-24 23:51
#98639 #98639
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wozu unnötigerweise GNUmake-isms verwenden? Das hier funktioniert sowohl mit GNU make als auch BSD make:

Code: (dl )
1
2
3
4
.SUFFIXES: .ps .fsa

.fsa.ps:
echo "von $< nach $@"
pktm
 2007-08-25 12:27
#98658 #98658
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Und was muss ich machen, damit das immer ausgeführt wird,egal welchen Teil des Makefiles ich starte?
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2007-08-25 12:48
#98660 #98660
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nun gut. Das kann man wohl ohne BSD-/GNU-/sonstige Make-Erweiterungen wohl nicht. Wenn man ein POSIX-System voraussetzen kann, könnte man zur Not
Code: (dl )
1
2
all:
for i in *.fsa; do ${MAKE} `basename $$i .fsa`.ps; done
schreiben.
betterworld
 2007-08-25 21:59
#98666 #98666
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
ptk+2007-08-25 10:48:04--
Nun gut. Das kann man wohl ohne BSD-/GNU-/sonstige Make-Erweiterungen wohl nicht. Wenn man ein POSIX-System voraussetzen kann, könnte man zur Not
Code: (dl )
1
2
all:
for i in *.fsa; do ${MAKE} `basename $$i .fsa`.ps; done
schreiben.

Wenn man GNU-make (sorry :)) voraussetzt, kann man das so schreiben:
Code: (dl )
all: $(patsubst %.fsa,%.ps,$(wildcard *.fsa))

(ungetestet)
ptk
 2007-08-25 23:19
#98667 #98667
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Soweit waren wir schon, siehe oben. Mir ging es nur darum, eine portable Lösung ohne GNU-Erweiterungen zu finden.
betterworld
 2007-08-26 01:55
#98668 #98668
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Oh, ich hatte das bei murphy ganz uebersehen.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-08-22 21:51.