Wie führen Sie ein logisches ODER mit dem ifeq
Operator make durch ?
zB habe ich (vereinfacht):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
möchte aber diese Zeilen konsolidieren.
(ja, ja, Autotools, konfigurieren usw. usw .; zu hartnäckig für die aktuelle Situation, möchte hier alles im Makefile behalten)
[logisches Gegenteil dieser Frage: Verwendung der Mehrfachbedingung in der 'ifeq'-Anweisung ]
ifdef
, diese Frage bezieht sich auf Verkettungsoperatorenifeq
, ähnlich, aber die Antworten sind definitiv unterschiedlich.OR
Operator für dasifneq
?Antworten:
Wie im Mailinglisten-Archiv zu finden,
man kann die Filterfunktion verwenden.
Beispielsweise
Filter X, AB gibt diejenigen von A, B zurück, die gleich X sind.
Eine Variation davon ist
Dabei wird stattdessen ein negativer Vergleich mit einer leeren Zeichenfolge verwendet (der Filter gibt eine leere Zeichenfolge zurück, wenn GCC_MINOR nicht mit den Argumenten übereinstimmt.)
Der Nachteil dieser Methoden ist, dass die Argumente einzelne Wörter sein müssen.
quelle
ifneq (,$(filter 4 5,$(GCC_MINOR)))
:)if(flagA == TRUE || flagB == true)
, aber wenn Sie dies tun$(filter true, $(flagA) $(flagB)
und beide wahr sind, erhalten Sieifeq(true, true true)
Sie können eine andere Variable einführen. Es konsolidiert nicht beide Prüfungen, aber es vermeidet zumindest, dass der Körper zweimal eingesetzt werden muss:
quelle
Ich glaube nicht, dass es einen prägnanten, vernünftigen Weg gibt, dies zu tun, aber es gibt ausführliche, vernünftige Wege (wie Foo Bahs) und prägnante, pathologische Wege wie
(der den Befehl ausführt, vorausgesetzt, die Zeichenfolge $ (GCC_MINOR) erscheint in der Zeichenfolge 4-5).
quelle
Hier flexiblere Variante: Es verwendet eine externe Shell, ermöglicht jedoch die Überprüfung auf beliebige Bedingungen:
quelle
Eine andere Möglichkeit, die Sie in diesem Fall in Betracht ziehen können, ist:
Ich verwende dasselbe in meinem Code, weil ich kein separates
config
oder pflegen möchteConfigure
.Sie müssen jedoch ein tragbares, nicht anämisches Gerät
make
wie GNU make (gmake
) und nicht das von Posix verwendenmake
.Und es geht nicht um das Problem der logischen
AND
undOR
.quelle