2010-10-18 11 views
1

J'ai un seul programme utilisé pour interagir avec un joystick. Il utilise une compilation conditionnelle pour spécifier un joystick spécifique. Nous faisons cela maintenant en codant simplement le bon drapeau dans le Makefile.Compilation avec différents drapeaux dans Makefile?

Je voudrais faire en sorte qu'il utilise un drapeau différent basé sur la commande donnée au Makefile. Ainsi, par exemple, j'ai actuellement ceci:

.PHONY: saitek 
saitek: $(SOURCES) 
    $(COMPILE) -DSAITEK 
.PHONY: logitech 
logitech: $(SOURCES) 
    $(COMPILE) -DLOGITECH 

Je veux seulement une de ces commandes à jamais être exécuté, et je veux tous faire la même exécutable. Mais si je réexécute 'make', il compilera le programme à nouveau. Je voudrais qu'il reconnaisse qu'il a déjà construit le programme.

Y a-t-il un moyen de le faire avec un Makefile?

Répondre

3

Si vous utilisez GNUMake, cela fera ce que vous demandez. Il utilise un drapeau différent basé sur la commande donnée à Make, et il ne reconstruit pas le programme inutilement.

.PHONY: saitek logitech 
saitek: JOYSTICK=SAITEK 
logitech: JOYSTICK=LOGITECH 

# Suppose the actual name of your executable is "program" 

saitek logitech: program 

program: $(SOURCES) 
    $(COMPILE) -D$(JOYSTICK) 
0

Je doute de la nécessité de cela. Vous pouvez simplement appeler make comme quelque chose comme make CFLAGS=-DSAITEK ou utiliser autoconf et remplacer dans les bonnes définitions.

Cela dit, que diriez-vous quelque chose comme ceci:

saitek logitech: program 
.PHONY: saitek logitech 

ifeq ($(MAKECMDGOALS),saitek) 
CFLAGS += -DSAITEK 
endif 
ifeq ($(MAKECMDGOALS),logitech) 
CFLAGS += -DLOGITECH 
endif 

program: $(OBJS) 
# Whatever