在Makefile中使用不同的标志编译?
我有一个与操纵杆交互的程序。它使用条件编译来指定特定的操纵杆。我们现在只需将正确的标志硬编码到Makefile中就可以做到这一点 我想让它使用一个不同的标志,这个标志基于给Makefile的命令。例如,我现在有:在Makefile中使用不同的标志编译?,makefile,Makefile,我有一个与操纵杆交互的程序。它使用条件编译来指定特定的操纵杆。我们现在只需将正确的标志硬编码到Makefile中就可以做到这一点 我想让它使用一个不同的标志,这个标志基于给Makefile的命令。例如,我现在有: .PHONY: saitek saitek: $(SOURCES) $(COMPILE) -DSAITEK .PHONY: logitech logitech: $(SOURCES) $(COMPILE) -DLOGITECH 我只希望这些命令中的一个能够运行,并且我
.PHONY: saitek
saitek: $(SOURCES)
$(COMPILE) -DSAITEK
.PHONY: logitech
logitech: $(SOURCES)
$(COMPILE) -DLOGITECH
我只希望这些命令中的一个能够运行,并且我希望它们都能够生成相同的可执行文件。但如果我重新运行“make”,它将再次编译程序。我想让它认识到它已经建立了这个程序
用Makefile还可以这样做吗?我怀疑这样做的必要性。您可以调用
make
,类似于makecflags=-DSAITEK
或者使用autoconf
并替换正确的定义
也就是说,像这样的事情怎么样:
saitek logitech: program
.PHONY: saitek logitech
ifeq ($(MAKECMDGOALS),saitek)
CFLAGS += -DSAITEK
endif
ifeq ($(MAKECMDGOALS),logitech)
CFLAGS += -DLOGITECH
endif
program: $(OBJS)
# Whatever
GNU make,所以如果您指定
$ JOYSICK=LOGITECH
在您的shell中,使用
CFLAGS+=-D$(JOYSTICK)
在您的makefile中。如果您正在使用GNUMake,这将满足您的要求。它根据要生成的命令使用不同的标志,并且不会不必要地重新生成程序
.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)