Forums Neueste Beiträge
 

make - Makefile mit Patterns

30/05/2012 - 07:58 von Peter Blancke | Report spam
Guten Morgen,

in einem Webprojekt habe ich Javaskript-Dateien in folgender
Ordnerstruktur liegen:

./js_local
./js

In "js_local" liegen meine reichlich kommentierten Skripte und per
Komprimierprogramm (yui-compressor) gehen diese Dateien dann nach
"js". Der Webserver bekommt nur "js", das schafft kuerzere
Ladezeiten.

In meinem Makefile findet sich dazu folgender Ausschnitt:

js:
cd lib/js_local; \
for i in *.js; do yui-compressor --type js $$i > ../js/$$i ; done

(Es gibt keine Leer- und Sonderzeichen in Dateinamen)

Bei jedem Aufruf "make js" komprimiert dieses Makefile natuerlich
_saemtliche_ js-Dateien. Das war bisher nicht weiter schlimm.

Jetzt nimmt die Zahl und der Umfang der Dateien aber bedrohliche
Ausmasze an und ich moechte gerne die Faehigkeit von make,
Abhaengigkeiten zu erkennen, nutzen. Aber irgendwie greifen meine
Versuche, mit Pattern zu arbeiten nicht.

Problematisch scheint es zu sein, dasz Ursprung und Ziel in
unterschiedlichen Verzeichnissen liegt, das sollte aber so bleiben.

Kann mir hier jemand weiterhelfen? Oder ist der make-Ansatz hier
voellig flashc und ich sollte das alles mal auf Shell-Skripte
umschreiben?

Grusz,

Peter Blancke

Hoc est enim verbum meum!
 

Lesen sie die antworten

#1 Dirk Thierbach
30/05/2012 - 12:51 | Warnen spam
Peter Blancke wrote:
Jetzt nimmt die Zahl und der Umfang der Dateien aber bedrohliche
Ausmasze an und ich moechte gerne die Faehigkeit von make,
Abhaengigkeiten zu erkennen, nutzen. Aber irgendwie greifen meine
Versuche, mit Pattern zu arbeiten nicht.

Problematisch scheint es zu sein, dasz Ursprung und Ziel in
unterschiedlichen Verzeichnissen liegt, das sollte aber so bleiben.

Kann mir hier jemand weiterhelfen?



Ohne es ausprobiert zu haben: Du brauchst vor allem in oberstes
Ziel, dass von allen zu komprimierenden Skripten abhaengt (egal,
ob diese schon existieren, oder nicht).

Also im Verzeichnis "js" bei der Struktur

./js_local
./js



mit GNU make so etwas wie

SRC=../js_local/*.js
DST=$(SRC:../js_local/=)

compress: $(DST)

%.js: ../js_local/%.js
yui-compressor --type js $< > $@

Und dann

make compress

Wenn Du make im uebergeordneten Verzeichnis aufrufst, entsprechend
andere Pfade.

Wie gesagt, ich hab's nicht ausprobiert, aber vielleicht hilft
es ja schon. Notfalls muss man wirklich mit den Verzeichnissen fummeln
(eigenes Makefile in js_local, rekursiv aufrufen; ja, es gibt
Leute, die diese Loesung nicht moegen).

Die Dokus (im "info"-Format) zu GNU make sind auch immer sehr hilfreich.
Sich zum debuggen mal ein paar Variablen mit "echo" ausgeben lassen
hilft auch. Oder make mit den entsprechenden Optionen geschwaetziger machen.

- Dirk

Ähnliche fragen