2008-11-10 5 views
4

J'ai beaucoup d'affectations où je dois continuellement mettre à jour un fichier Makefile à mesure que j'ajoute plus de programmes C numérotés par la suite. Y at-il un moyen de le faire avec une boucle qui itère sur les valeurs 1.1, 1.2, 1.3, etc.?Boucles dans Makefile

all: 1.1 1.2 1.3 1.4 1.5 1.6 1.7. 1.8 1.9 

1.1: 1.1.o 
    gcc -o 1.1 $(FLAGS) 1.1.o 
1.1.o: 1.1.c 
    gcc -c $(FLAGS) 1.1.c 

1.2: 1.2.o 
    gcc -o 1.2 $(FLAGS) 1.2.o 
1.2.o: 1.2.c 
    gcc -c $(FLAGS) 1.2.c 

1.3: 1.3.o 
    gcc -o 1.3 $(FLAGS) 1.3.o 
1.3.o: 1.3.c 
    gcc -c $(FLAGS) 1.3.c 

1.4: 1.4.o 
    gcc -o 1.4 $(FLAGS) 1.4.o 
1.4.o: 1.4.c 
    gcc -c $(FLAGS) 1.4.c 

1.5: 1.5.o 
    gcc -o 1.5 $(FLAGS) 1.5.o 
1.5.o: 1.5.c 
    gcc -c $(FLAGS) 1.5.c 

1.6: 1.6.o 
    gcc -o 1.6 $(FLAGS) 1.6.o 
1.6.o: 1.6.c 
    gcc -c $(FLAGS) 1.6.c 

1.7: 1.7.o 
    gcc -o 1.7 $(FLAGS) 1.7.o 
1.7.o: 1.7.c 
    gcc -c $(FLAGS) 1.7.c 

1.8: 1.8.o 
    gcc -o 1.8 $(FLAGS) 1.8.o 
1.8.o: 1.8.c 
    gcc -c $(FLAGS) 1.8.c 

1.9: 1.9.o 
    gcc -o 1.9 $(FLAGS) 1.9.o 
1.9.o: 1.9.c 
    gcc -c $(FLAGS) 1.9.c 

clean: 
    rm -f *.o 
    rm -f 1.1 1.2 1.3 1.4 1.5 1.6 1.7. 1.8 1.9

Répondre

8

Vous voulez un suffix rule, pas une boucle.

+1

Bon appel - une règle de suffixe éliminera la duplication des règles de construction. Combiné avec une boucle qui spécifie les dépendances, nous avons également couvert l'évolutivité! –

+0

Non, il (ou au moins le monde en général) ne veut pas nécessairement une règle de suffixe. Il voudra peut-être créer des règles pour construire 1.1 à partir de 1.1.o, et ainsi de suite à 1.8 <-1.8.o, mais il ne voudra peut-être pas créer 1.9 de 1.9.o - peut-être veut-il construire FOOBAR à partir de 1.9.o. Ou peut-être 1.9 est construit à partir de SPECIAL.1.9.o, et 1.9.o va ailleurs entièrement. // Il peut vouloir avoir une règle de suffixe, qui ne s'applique qu'à une liste spécifiée de fichiers avec ce suffixe, et pas à tous les fichiers avec ce suffixe. –

0

Oui; vous pouvez utiliser des commandes shell dans un fichier Makefile et créer lui-même la boucle dont vous avez besoin. Il y a des tas de bons exemples partout sur le web; en supposant de votre utilisation de gcc que vous utilisez également GNU make, essayez ici:

http://www.gnu.org/software/make/manual/make.html#Foreach-Function