FLAG1 ?= no
FLAG2 ?= yes
define check_
$(if $(filter $($(1)),$(2)),,$(error BAD $(1) argument))
endef
$(call check_,FLAG1,yes no)
$(call check_,FLAG2,yes no)
Обратите внимание, что вы добавили пробел перед FLAG1
, что означает, что $$(1)
разрешается в $( FLAG1)
, что, в свою очередь, приводит к пустому. Следующая часть заключается в том, что я не уверен насчет использования if ifneq
внутри определения. Вы можете использовать $(if )
вместо
---- РЕДАКТИРОВАТЬ ------
На самом деле это комбинация отсутствующего пробела и ответа @MadScientists ... Следующее также работает:
define check_
ifneq ($(filter $($(1)),$(2)),$($(1)))
$$(error Bad $(1) argument [$($(1))] / [$(filter $($(1)),$(2))])
endif
endef
$(eval $(call check_,FLAG1,yes no))
Таким образом, ifneq
может использоваться внутри макроса ... (и, как указал @MadScientist, вы должны экранировать $
перед $(error)
, чтобы предотвратить егорасширяется по вызову ...)