Tel que trouvé dans les archives de la liste de diffusion,
on peut utiliser le filter
fonction.
Par exemple
ifeq ($(GCC_MINOR),$(filter $(GCC_MINOR),4 5))
filter X, A B
retournera ceux de A,B qui sont égaux à X. Notez que, bien que cela ne soit pas pertinent dans l'exemple ci-dessus, il s'agit d'une opération XOR. C'est-à-dire que si vous avez plutôt quelque chose comme :
ifeq (4, $(filter 4, $(VAR1) $(VAR2)))
Et ensuite faire par exemple make VAR1=4 VAR2=4
le filtre retournera 4 4
qui n'est pas égal à 4
.
Une variation qui effectue une opération OR à la place est :
ifneq (,$(filter $(GCC_MINOR),4 5))
où une comparaison négative avec une chaîne vide est utilisée à la place ( filter
retournera une chaîne vide si GCC_MINOR
ne correspond pas aux arguments). En utilisant le VAR1
/ VAR2
exemple, cela ressemblerait à ceci :
ifneq (, $(filter 4, $(VAR1) $(VAR2)))
L'inconvénient de ces méthodes est que vous devez être sûr que ces arguments seront toujours des mots simples. Par exemple, si VAR1
es 4 foo
le résultat du filtre est toujours 4
et le ifneq
L'expression est toujours vraie. Si VAR1
es 4 5
le résultat du filtre est 4 5
y el ifneq
est vraie.
Une alternative simple consiste à mettre la même opération dans les deux versions de l'interface utilisateur. ifeq
y else ifeq
branche, par exemple comme ceci :
ifeq ($(GCC_MINOR),4)
@echo Supported version
else ifeq ($(GCC_MINOR),5)
@echo Supported version
else
@echo Unsupported version
endif
0 votes
Duplicata possible de Vérification des conditions complexes dans le Makefile .
1 votes
Je ne pense pas qu'il s'agisse d'un doublon, la question liée concerne le chaînage.
ifdef
opérateurs, cette question est liée au chaînageifeq
opérateurs, similaires, mais les réponses sont définitivement différentes.0 votes
Similaire à Y a-t-il une logique
OR
pour l'opérateurifneq
?