В make файле GNU я хотел бы установить выходную переменную в одно значение (пусть говорят "true" ), если входная переменная равна одному из двух значений и другому значению ( "false" ), когда оно не является.
Благодаря this SO answer Я узнал о функциях and
и or
, и вскоре после этого я нашел функцию 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
, and
и or
?