web-dev-qa-db-fra.com

Règle de makefile qui dépend de tous les fichiers d'un répertoire (y compris dans les sous-répertoires)

Une règle dans mon Makefile zippe un répertoire entier (res/) dans un fichier Zip. De toute évidence, cette règle doit être exécutée lorsque tout fichier sous le res/ changements de répertoire. Ainsi, je veux que la règle ait comme condition préalable tous les fichiers sous ce répertoire. Comment puis-je appliquer cette règle?

Dans Bash avec l'option globstar activée , vous pouvez obtenir une liste de tous les fichiers de ce répertoire en utilisant le modèle générique res/**/*. Cependant, cela ne semble pas fonctionner si vous le spécifiez comme condition préalable dans le Makefile:

filename.jar: res/**/*

Même après touching un fichier dans res/, Faire des rapports fixes

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

si clairement qu'il ne reconnaît pas le modèle.

Si je déclare le répertoire lui-même comme une condition préalable:

filename.jar: res

alors Make ne se réexécutera pas lorsqu'un fichier est modifié (je pense que make ne regarde que la date de modification du répertoire lui-même, qui ne change que lorsque des enfants immédiats sont ajoutés, supprimés ou renommés).

37
Mechanical snail

Ce:

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

semble fonctionner, au moins sur certaines plates-formes.

ÉDITER:

Ou mieux, coupez simplement le nœud:

filename.jar: $(Shell find res -type f)
53
Beta