Comment construire plusieurs cibles à partir d’un makefile

J’essaye de paramétrer mes cibles de makefile. Actuellement, il a un

TARGET = main 

déclaration près du sumt. Il en tire la liste SRC et beaucoup d’autres choses.

Cependant, j’ai modifié mon code C, de sorte que j’ai plusieurs fichiers .c de niveau supérieur différents pour obtenir essentiellement des versions variantes. Donc, ce que je veux être capable de faire est essentiellement

 make target1 

ou

 make target2 

Et varie ce que TARGET est défini dans le makefile. Je suis confus comment accomplir cela. Je pensais que je pourrais append quelque chose comme

 target1: all TARGET=target1 

Cela n’a pas semblé bien fonctionner du tout cependant. Existe-t-il un schéma général pour ce faire?

Les noms de variable paramétrés et les variables spécifiques à la cible peuvent faire ce que vous voulez, car la valeur d’une variable spécifique à la cible est normalement “héritée” par les conditions préalables de cette cible (en supposant que vous utilisez GNU make):

 target1_SRC=123 456 target2_SRC=abc def target1: TARGET=target1 target2: TARGET=target2 target1: all target2: all all: ; @echo $($(TARGET)_SRC) 

Ensuite, vous pouvez exécuter make target1 ou make target2 , par exemple:

 $ make target1 123 456 $ make target2 abc def 

Je suggérerais simplement de préciser vos cibles en tant que cibles distinctes dans le makefile:

 all: target1 target2 OTHER_OBJS = misca.o miscb.o miscc.o target1: target1.o $(OTHER_OBJS) target2: target2.o $(OTHER_OBJS) 

Ensuite, make , make target1 , make target2 , et ainsi de suite feront tous ce que vous voulez.

Vous dites que votre makefile “dérive la liste SRC de [ $(TARGET) ]” d’une manière supposément de haute technologie, mais il pourrait être intéressant d’essayer de lister explicitement les fichiers object de manière low-tech, comme ci-dessus. L’utilisation de différentes cibles est sans doute le schéma général utilisé par Make pour produire différents résultats.