2009-10-04 7 views
1

J'ai un tas de répertoires. Je veux construire un objet pour chaque répertoire. Supposons OBJS contient « build/build dir1/dir2 build/rep3 », et le modèle que je suis mise en correspondance estCréer une dépendance en utilisant shell et%?

build/%: % 
    <do something here> 

Je voudrais ajouter, pour chaque objet, les dépendances pour chaque fichier dans ce répertoire (récursivement). J'ai pensé faire quelque chose comme

build/%: $(shell find %) 
    <do something here> 

Mais il semble que le second '%' ne soit pas développé. Comment puis-je faire fonctionner cela?

(chose étrange que j'ai remarqué est que le '%' dans '$ (shell echo%)' est agrandi.)

Merci.

+0

Votre question n'est pas claire. Voulez-vous dire que vous voulez faire construire/obj1, et vous voulez que chaque fichier dans build/dir1 soit une condition préalable (et la même chose pour dir2 et dir3)? – Beta

Répondre

3

Je ne pense pas que vous pouvez appeler un processus pour calculer les dépendances. La seule façon d'exécuter un processus pour créer des dépendances consiste à faire en sorte qu'une variable reçoive la sortie d'un processus et utilise cette variable, mais cela ne résoudra pas votre problème.

La solution commune est de générer des fichiers de dépendance, et de les inclure:

 
include build/*.depend 

build/%: build/%.depend % 
    ... 

build/%.depend: 
    command to generate explicit dependencies for build/% into build/%.depend 
    possibly recursive make invocations 

La première fois que vous construisez, aucun fichier de dépendance sera généré, mais les sorties de construction ne sera pas là, non plus, donc l'action de construction va fonctionner, de toute façon. Lors des invocations de make suivantes, les fichiers include sont là et sont pris en compte par make.

1
You could try: 
DIR := % 
$(shell find $(DIR)) 
Questions connexes