我有一个程序用于与操纵杆交互。它使用条件编译来指定特定的操纵杆。我们现在只需将正确的标志硬编码到Makefile中即可。
我想这样做,所以它根据给Makefile的命令使用不同的标志。例如,我目前有这个:
.PHONY: saitek
saitek: $(SOURCES)
$(COMPILE) -DSAITEK
.PHONY: logitech
logitech: $(SOURCES)
$(COMPILE) -DLOGITECH
我只想运行其中一个命令,我希望它们都能生成相同的可执行文件。但如果我重新运行'make',它将再次编译程序。我希望它能够认识到它已经构建了该程序。
无论如何使用Makefile执行此操作?
答案 0 :(得分: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)
答案 1 :(得分:2)
GNU make inherits variables from its environment,所以如果你指定
$ JOYSICK=LOGITECH
在你的shell中,然后使用
CFLAGS+=-D$(JOYSTICK)
在您的makefile中。
答案 2 :(得分: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