В 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
, и
и или
?