В простых случаях часто используются глобусы вместо полных регулярных выражений. gmtt - это библиотека GNUmake, которая их реализует.Ваш пример может выглядеть так:
include gmtt/gmtt.mk
PLATFORM := CYGWIN-NT-3.5
ifneq ($(call glob-match,$(PLATFORM),CYGWIN-*-4.?),)
$(info We are on Cygwin 4.x)
endif
ifneq ($(call glob-match,$(PLATFORM),CYGWIN-*-3.?),)
$(info We are on Cygwin 3.x)
endif
ifneq ($(call glob-match,$(PLATFORM),Ubuntu*),)
$(info We are on Ubuntu)
endif
Вывод:
$ make
We are on Cygwin 3.x
Чтобы упростить и упростить такие выборы, gmtt
имеет табличные данные и функции выбора, которые часто делают его более понятнымчто происходит:
include gmtt/gmtt.mk
PLATFORM := CYGWIN-NT-3.5
define AVAILABLE-PLATFORMS :=
2
CYGWIN-*-4.? toolX
CYGWIN-*-3.? toolY
Ubuntu* toolZ
endef
# select column 2 from the table line(s) which glob-match the current platform:
USED-TOOL := $(call select,2,$(AVAILABLE-PLATFORMS),$$(call glob-match,$(PLATFORM),$$1))
$(info We are using $(USED-TOOL))
Вывод:
We are using toolY
При использовании ячеек таблицы с пробелами возникает оговорка (вы должны экранировать пробелы с помощью spc-mask
и преобразовать их обратнос spc-unmask
при использовании значения), но в большинстве случаев это довольно простое программирование.