如何编写函数,以便仅在宏中尚未找到值时才添加它?

时间:2018-10-26 17:20:01

标签: gnu-make

我想以一种相当通用的方式将有条件的变量添加到宏(如果尚不存在的话)。

这是我尝试使用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
$

我想看到的输出是一个“猫”(不是多个)

1 个答案:

答案 0 :(得分:0)

使用if函数,而不要使用ifdef方法更简单。

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

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

all: ; @echo $(OBJ_DIRS)