我如何编写一个函数,以便只有在宏中找不到该值时才添加该值?

How can I write a function so that a value is added only if it's not found in the macro already?

我想要一种相当通用的方法,可以有条件地将变量添加到宏中(如果它不存在的话)。

这是我对 gnu Make 4.1 版的尝试:

$ cat Makefile 
define add_obj_dir
ifneq ($(1), $(filter $(1), $(OBJ_DIRS)))
OBJ_DIRS += $(1)
endif
endef

$(eval $(call add_obj_dir, "cat"))
$(eval $(call add_obj_dir, "cat"))
$(eval $(call add_obj_dir, "cat"))

all:
    @echo $(OBJ_DIRS)
$ 
$ 
$ make
cat cat cat
$

我希望看到的输出是一个 "cat"(不是多个)

使用if函数,而不是ifdef方式更简单。

add_obj_dir = $(if $(filter ,$(OBJ_DIRS)),,OBJ_DIRS += )

$(eval (call add_obj_dir,cat))
$(eval (call add_obj_dir,cat))
$(eval (call add_obj_dir,cat))

all: ; @echo $(OBJ_DIRS)