我如何编写一个函数,以便只有在宏中找不到该值时才添加该值?
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)
我想要一种相当通用的方法,可以有条件地将变量添加到宏中(如果它不存在的话)。
这是我对 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)