Условные операторы в Make

ifeq

ifeq ("A", "A") @echo "A=A" endif

A=A

Логическое ИЛИ в GNUmakefile

Оператор OR отсутствует в Make-файлах

Частично логическое OR в Make-файле можно заменить с помощью функции filter

ifeq ("A", $(filter "A", "A" "B")) $(info "A = A") endif

filter возвращает совпадение между "A" и "A" "B" то есть "A" затем ifeq сравнивает "A" и "A"

make

A = A

Например можно проверить значение переменной на принадлежность к известному списку.

URL=eth1.ru ifeq ($(URL),$(filter $(URL), eth1.ru eth1.ru topbicycle.ru)) $(info URL $(URL) is among known list) else $(info URL $(URL) is not known) endif

make

URL eth1.ru is among known list

Пример

TAGS="rhel8 rhel7" $(info TAGS are $(TAGS)) PROFILE="deb" ifeq (${PROFILE}, $(filter ${PROFILE}, "deb" "debian")) override TAGS = ubuntu debian $(info MATCH NEW TAGS are $(TAGS)) else $(info NO MATCH TAGS are $(TAGS)) endif

make

TAGS are rhel8 rhel7
MATCH NEW TAGS are ubuntu debian

Автор статьи: Андрей Олегович