2013-01-12 13 views
20

Una regola nel mio Makefile zippa un'intera directory (res/) in un file ZIP. Ovviamente, questa regola deve essere eseguita quando qualsiasi file sotto le modifiche alla directory res/. Quindi, voglio che la regola abbia come prerequisito tutti i file sotto quella directory. Come posso implementare questa regola?Regola Makefile che dipende da tutti i file in una directory (inclusa nelle sottodirectory)

In Bash with the globstar option enabled, è possibile ottenere un elenco di tutti i file in tale directory utilizzando il modello jolly res/**/*. Tuttavia, non sembra funzionare se si specifica come un prerequisito nel Makefile:

filename.jar: res/**/* 

Anche dopo touch ing un file in res/, stendere i rapporti ancora

make: `filename.jar' is up to date. 

così chiaramente è non riconoscendo il modello.

Se io dichiaro la directory stessa come prerequisito:

filename.jar: res 

poi fare non sarà ri-eseguire quando un file viene modificato (credo make guarda solo alla data di modifica della directory stessa, che solo cambia quando vengono aggiunti, rimossi o rinominati i bambini immediati).

+0

possibile duplicato di [Makefile: dipende da ogni file di una directory] (http://stackoverflow.com/questions/5656913/makefile-depend-on-every-file-of-a-directory) –

risposta

29

questo:

filename.jar: $(wildcard res/**/*) 

sembra funzionare, almeno su alcune piattaforme.

EDIT:

O meglio, appena tagliato il nodo:

filename.jar: $(shell find res -type f) 
+1

Il suggerimento 'wildcard' non funziona per me, ma' find' funziona. (Ho usato solo '$ (shell find res)' per attivarlo quando i file vengono cancellati.) –

+3

Avvertenza: Se si * rimuove * uno dei file di input dopo aver creato il jar, make non lo noterà. Per poter rilevare le rimozioni di file, è possibile memorizzare l'elenco in un file, simile a http://stackoverflow.com/questions/3236145/force-gnu-make-to-rebuild-objects-affected-by-compiler-definition/3237349 # 3237349 – slowdog

+0

@slowdog: vero, ma per questo scopo (archivio ZIP) non penso che importi. – Beta

Problemi correlati