Компилирование с разными флагами в Makefile? - PullRequest
1 голос
/ 19 октября 2010

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 19 октября 2010

Если вы используете 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)
2 голосов
/ 19 октября 2010

GNU make наследует переменные из своего окружения , поэтому, если вы укажете

$ JOYSICK=LOGITECH

в вашей оболочке и используете

CFLAGS+=-D$(JOYSTICK)

в вашем make-файле.1009 *

0 голосов
/ 19 октября 2010

Я сомневаюсь в необходимости этого. Вы можете просто вызвать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...