2010-10-18 6 views
1

У меня есть одна программа, используемая для взаимодействия с джойстиком. Он использует условную компиляцию для указания конкретного джойстика. Мы делаем это прямо сейчас, просто жестко кодируя правильный флаг в Makefile.Компиляция с различными флагами в Makefile?

Я хотел бы сделать так, чтобы он использовал другой флаг, основанный на команде, предоставленной Makefile. Так, например, я в настоящее время это:

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

Я хочу только одна из этих команд, когда-либо будет работать, и я хочу, чтобы они все делают тот же исполняемый файл. Но если я повторю «make», он снова скомпилирует программу. Я бы хотел, чтобы он понял, что уже построена программа.

Есть ли способ сделать это с помощью Makefile?

ответ

3

Если вы используете GNUMake, это будет делать то, что вы просите. Он использует другой флаг, основанный на команде, заданной Make, и не перестраивает программу без необходимости.

.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

Я сомневаюсь в необходимости этого. Вы можете просто позвонить make как-то вроде make CFLAGS=-DSAITEK или использовать autoconf и подставить в правильном определении.

Это говорит, как о чем-то вроде этого:

saitek logitech: program 
.PHONY: saitek logitech 

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

program: $(OBJS) 
# Whatever 
Смежные вопросы