2010-05-20 9 views
4

J'essaie de faire GNU make pour produire plusieurs sorties à partir d'une seule entrée. L'exemple le plus simple que je peux démontrer est:GNU make rule pour plusieurs cibles

a b : test 
    cp $< [email protected] 

qui, je crois, devrait copier le fichier test aux nom des fichiers a et b. Cependant, il ne fait que le fichier a, ce qui me semble être contraire aux instructions indiquées ici:

http://www.gnu.org/software/automake/manual/make/Multiple-Targets.html

Est-ce que je fais quelque chose de mal?

Merci, Tom

Répondre

9

Si vous exécutez une règle qui dépend de a, il exécutera votre règle avec $< comme test et [email protected] comme a. Si vous exécutez une règle qui dépend de b, [email protected] sera plutôt b. Si vous faites une règle ci-dessus votre règle actuelle comme:

all: a b 

Il se déroulera les règles de a et b, qui est la même règle deux fois. Sinon, si votre règle est la première dans le fichier, elle sera exécutée avec la première cible uniquement, qui est a

+0

Cela fonctionne! Merci beaucoup! –

0

Une petite précision à la réponse de @ MichaelMrozek.

Ce:

a b : test 
    cp $< [email protected] 

est exactement la même chose que:

a : test 
    cp $< [email protected] 
b : test 
    cp $< [email protected] 

un est la première cible dans le fichier, il est donc la cible par défaut. Seule la règle pour un s'exécute, car il n'y a pas de dépendance sur b.

Comme @MichaelMrozek dit, vous pouvez ajouter une autre règle, ou vous pouvez exécuter

make a b 
0

Tout est OK. Le manuel dit:

bigoutput littleoutput : text.g 
     generate text.g -$(subst output,,[email protected]) > [email protected] 

est équivalent à

bigoutput : text.g 
     generate text.g -big > bigoutput 
littleoutput : text.g 
    generate text.g -little > littleoutput 

Ainsi, votre Makefile est également équivalent à

a : test 
    cp $< [email protected] 
b : test 
    cp $< [email protected] 

et quand vous seriez entré dans la commande 'make', le programme par défaut pour construire la première cible, à savoir 'a'.

Questions connexes