Как проверить, равна ли переменная одному из двух значений с помощью функции if и/или функции

В makefile GNU я хотел бы установить выходную переменную на одно значение (скажем, "true"), если входная переменная равна одному из двух значений, и на другое значение ("false"), когда это не так.

Благодаря этому SO-ответу я узнал о функциях и и или и вскоре после этого нашел функцию if. Похоже, что эти функции доступны в моей версии make, поэтому я хотел бы их использовать. Хотелось бы написать что-то вроде этого:

TEST_INPUT = `hostname`
TEST_OUTPUT = $(if $(or $(eq $(TEST_INPUT),hal9000),
                        $(eq $(TEST_INPUT),pipboy)),true,false)

К сожалению, я не могу, так как не смог найти никакой очевидной формы ожидаемой функции eq. Я могу добиться желаемого с помощью функции filter:

TRUE_HOSTS = hal9000 pipboy
TEST_OUTPUT = $(if $(filter $(TEST_INPUT),$(TRUE_HOSTS)),true,false)

или функции subst:

TEST_OUTPUT = $(if $(and $(subst hal9000,,$(TEST_INPUT)),
                         $(subst pipboy,,$(TEST_INPUT))),
                   false,true)

, но для меня это не очень красивый и не читаемый код. Есть ли решения ближе к первому примеру (тот, в котором используется несуществующая функция eq)? Может быть, я вообще не уловил назначение функций if, и и или ?

16
задан Community 23 May 2017 в 12:02
поделиться