W pliku make GNU, chciałbym ustawić zmienną wyjściową na jedną wartość (powiedzmy "prawda"), jeśli wejście zmienna jest równa jednej z dwóch wartości i innej wartości ("false"), gdy nie jest.Jak sprawdzić, czy zmienna jest równa jednej z dwóch wartości za pomocą funkcji if/or/i
Dzięki this SO answer dowiedziałem się o funkcjach and
i or
, a wkrótce potem znalazłem funkcję if
. Te funkcje wydają się być dostępne w mojej wersji make, więc chciałbym z nich skorzystać. Chciałbym napisać coś takiego:
TEST_INPUT = `hostname`
TEST_OUTPUT = $(if $(or $(eq $(TEST_INPUT),hal9000),
$(eq $(TEST_INPUT),pipboy)),true,false)
Niestety nie mogę, bo nie mogłem znaleźć żadnego oczywistą formą spodziewanego eq
funkcji. Jestem w stanie osiągnąć to, co chcę używając funkcji filter
:
TRUE_HOSTS = hal9000 pipboy
TEST_OUTPUT = $(if $(filter $(TEST_INPUT),$(TRUE_HOSTS)),true,false)
lub subst
funkcja:
TEST_OUTPUT = $(if $(and $(subst hal9000,,$(TEST_INPUT)),
$(subst pipboy,,$(TEST_INPUT))),
false,true)
ale dla mnie to nie jest ładny ani czytelny kod. Czy istnieją rozwiązania bliższe pierwszemu przykładowi (temu, który nie używa funkcji eq
)? Może w ogóle nie rozumiem przeznaczenia funkcji if
, and
i or
?
Dziękuję za potwierdzenie, że funkcje porównania nie są dostępne. Twoja funkcja "eq" jest również całkiem inteligentna i czytelniejsza niż moje rozwiązania (bezwstydnie z niej skorzystam). Dzięki :) –