检查 GNU Make 中覆盖变量的有效值

Checking valid values for overriden variables in GNU Make

我感兴趣的是检查在命令行上被覆盖的变量的值是否具有几个有效值之一。具体来说,我的 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 的东西,而不必编写单独的调试目标并在我的 recipies 中添加一堆混乱。

如果指定了 make BUILD=production 之类的内容,我想要的是一种方法来执行 $(warn Invalid BUILD option) 之类的事情。除了嵌套一堆 ifneq 之外,还有 better/more 惯用的方法吗?

好吧,这样的事情会起作用:

BUILD ?= release
OK_BUILDS := debug release

$(if $(filter $(BUILD),$(OK_BUILDS)),,$(warn Invalid BUILD option: $(BUILD))