Makefile findstring выдает непустую строку, даже если аргумент отсутствует в белом списке

#makefile

#makefile

Вопрос:

Я хочу, чтобы мой Makefile требовал указания среды, например

 make ENV=beta all
 

Мой Makefile начинается так

 ifeq ($(findstring ${ENV}, dev beta prod),)
  $(error ENV must be dev, beta, or prod (e.g. make ENV=dev))
endif

nop:
    echo "Nothing done."$(findstring ${ENV}, dev beta prod)"#"
 

Если я запускаю

 make ENV=devx nop
 

Я получаю этот вывод

 Makefile:7: *** ENV must be dev, beta, or prod (e.g. make ENV=dev). Stop.
 

С другой стороны

 make ENV=d nop
 

выдает этот вывод

 echo "Nothing done."d"#"
Nothing done.d#
 

Это показывает, что $(findstring... возвращает непустую строку, противоречащую документации

В чем подвох?

Ответ №1:

findstring Функция находит экземпляр «d»; документация неоднозначна, а не неверна. Используйте filter вместо этого.