Ответ 1
Если ваш make
является GNU-make и все определенные переменные содержат непробельный символ,
ifdef VAR1 && VAR2 && VAR3
можно записать как
ifneq ($(and $(VAR1),$(VAR2),$(VAR3)),)
На связанной ноте, вероятно, и функция требует версию 3.81 или позже.
В случае, если некоторые определенные переменные могут быть пустыми строками, если мы подготовим следующие функции:
ifndef_any_of = $(filter undefined,$(foreach v,$(1),$(origin $(v))))
ifdef_any_of = $(filter-out undefined,$(foreach v,$(1),$(origin $(v))))
тогда выполняются следующие условия:
ifdef VAR1 || VAR2
ifdef VAR1 && VAR2
может быть написано соответственно с помощью функции вызова:
ifneq ($(call ifdef_any_of,VAR1 VAR2),)
ifeq ($(call ifndef_any_of,VAR1 VAR2),)