我感兴趣的是检查在命令行上被覆盖的变量的值是否具有几个有效值之一。具体来说,我有一部分makefile看起来是这样的:
ifndef BUILD
BUILD ::= release
endif
# Set flags for $(CC), based on the value of $(BUILD)
CFLAGS ::= -Wall -pthread -std=c17 -I./src/include
CFLAGS.debug ::= -g
CFLAGS.release ::= -O3
CFLAGS ::= $(CFLAGS.$(BUILD)) $(CFLAGS)
我的目标是能够运行类似make BUILD=debug
的东西,而不必编写单独的调试目标,也不必给我的接收器添加一堆混乱。
我想要的是一种方法,如果指定了类似make BUILD=production
的内容,则可以执行类似$(warn Invalid BUILD option)
的内容。有比嵌套一堆ifneq
更好/更惯用的方法吗?
好吧,这样的东西会起作用:
BUILD ?= release
OK_BUILDS := debug release
$(if $(filter $(BUILD),$(OK_BUILDS)),,$(warn Invalid BUILD option: $(BUILD))