Comment effectuer un OU logique en utilisant l' ifeq
opérateur make ?
par exemple, j'ai (simplifié):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
mais souhaite consolider ces lignes.
(oui, oui, autotools, configure, etc etc; trop lourd pour la situation actuelle, aimerait tout garder dans le Makefile ici)
[l'opposé logique de cette question: Comment utiliser une condition multiple dans l'instruction 'ifeq' ]
ifdef
opérateurs de chaînage , cette question est liée auxifeq
opérateurs de chaînage , similaire, mais les réponses sont définitivement différentes.OR
opérateur logique pour leifneq
?Réponses:
Comme trouvé dans l'archive de la liste de diffusion,
on peut utiliser la fonction de filtre .
Par exemple
le filtre X, AB renverra ceux de A, B égaux à X.
Une variante de ceci est
où une comparaison négative avec une chaîne vide est utilisée à la place (le filtre retournera une chaîne vide si GCC_MINOR ne correspond pas aux arguments)
L'inconvénient de ces méthodes est que les arguments doivent être des mots uniques.
la source
ifneq (,$(filter 4 5,$(GCC_MINOR)))
:)if(flagA == TRUE || flagB == true)
, mais si vous le faites$(filter true, $(flagA) $(flagB)
et que les deux sont vrais, vous obtenezifeq(true, true true)
Vous pouvez introduire une autre variable. Cela ne consolide pas les deux contrôles, mais cela évite au moins d'avoir à remettre le corps en deux:
la source
Je ne pense pas qu'il existe une manière concise et sensée de le faire, mais il existe des moyens verbeux et sensés (comme celui de Foo Bah) et des moyens concis et pathologiques, tels que
(qui exécutera la commande à condition que la chaîne $ (GCC_MINOR) apparaisse à l'intérieur de la chaîne 4-5).
la source
Voici une variante plus flexible: elle utilise un shell externe, mais permet de vérifier les conditions arbitraires:
la source
Un autre que vous pouvez envisager d'utiliser dans ce cas est:
J'utilise en fait la même chose dans mon code parce que je ne veux pas maintenir un fichier
config
ouConfigure
.Mais vous devez utiliser un portable, non anémique
make
, comme GNU make (gmake
), et pas celui de Posixmake
.Et il n'aborde pas la question du logique
AND
etOR
.la source