Как выполнить логическое ИЛИ с помощью ifeq
оператора make ?
например, у меня есть (упрощенно):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
но хотелось бы закрепить эти строки.
(да, да, автоинструменты, настройка и т. д.; слишком тяжеловесны для текущей ситуации, хотелось бы сохранить все в Makefile здесь)
[логическая противоположность этого вопроса: как использовать множественное условие в выражении ifeq ]
ifdef
операторам цепочки , этот вопрос связан сifeq
операторами цепочки , похож, но ответы определенно разные.OR
оператор дляifneq
?Ответы:
Как видно из архива списка рассылки,
можно использовать функцию фильтра .
Например
filter X, AB вернет те из A, B, которые равны X.
Вариант этого
где вместо этого используется отрицательное сравнение с пустой строкой ( фильтр вернет пустую строку, если GCC_MINOR не соответствует аргументам)
Обратной стороной этих методов является то, что аргументы должны быть отдельными словами.
источник
ifneq (,$(filter 4 5,$(GCC_MINOR)))
:)if(flagA == TRUE || flagB == true)
, но если вы это сделаете$(filter true, $(flagA) $(flagB)
и оба они верны, вы получитеifeq(true, true true)
Вы можете ввести другую переменную. Он не объединяет обе проверки, но, по крайней мере, избавляет от необходимости вставлять тело дважды:
источник
Я не думаю, что есть краткий и разумный способ сделать это, но есть многословные, разумные способы (например, Фу Ба) и краткие, патологические способы, такие как
(который выполнит команду при условии, что строка $ (GCC_MINOR) появится внутри строки 4-5).
источник
Здесь более гибкий вариант: использует внешнюю оболочку, но позволяет проверять произвольные условия:
источник
Еще один вариант, который вы можете использовать в этом случае:
На самом деле я использую то же самое в своем коде, потому что не хочу поддерживать отдельный
config
илиConfigure
.Но вы должны использовать портативный, не анемичный
make
, такой как GNU make (gmake
), а не Posixmake
.И это не решает проблему логического
AND
иOR
.источник