Como você executa um OR lógico usando o ifeq
operador make ?
por exemplo, eu tenho (simplificado):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
mas gostaria de consolidar essas linhas.
(sim, sim, autotools, configure, etc etc; muito pesado para a situação atual, gostaria de manter tudo dentro do Makefile aqui)
[o oposto lógico desta pergunta: Como usar a condição múltipla na instrução 'ifeq' ]
ifdef
operadores de encadeamento , esta questão está relacionada aosifeq
operadores de encadeamento , semelhantes, mas as respostas são definitivamente diferentes.OR
operador lógico para oifneq
?Respostas:
Conforme encontrado no arquivo da lista de discussão,
pode-se usar a função de filtro .
Por exemplo
o filtro X, AB retornará aqueles de A, B que são iguais a X.
Uma variação disso é
onde uma comparação negativa com uma string vazia é usada (o filtro retornará uma string vazia se GCC_MINOR não corresponder aos argumentos)
A desvantagem desses métodos é que os argumentos precisam ser palavras isoladas.
fonte
ifneq (,$(filter 4 5,$(GCC_MINOR)))
:)if(flagA == TRUE || flagB == true)
, mas se você fizer$(filter true, $(flagA) $(flagB)
e ambos forem verdadeiros, você obteráifeq(true, true true)
Você pode introduzir outra variável. Não consolida as duas verificações, mas pelo menos evita ter que colocar o corpo duas vezes:
fonte
Não acho que exista uma forma concisa e sensata de fazer isso, mas existem formas verbosas e sensatas (como a de Foo Bah) e formas concisas e patológicas, como
(que executará o comando desde que a string $ (GCC_MINOR) apareça dentro da string 4-5).
fonte
Variante aqui mais flexível: ele usa shell externo, mas permite verificar se há condições arbitrárias:
fonte
Outro que você pode considerar usar neste caso é:
Na verdade, eu uso o mesmo em meu código porque não quero manter um
config
ouConfigure
.Mas você tem que usar um portátil, não anêmico
make
, como o GNU make (gmake
), e não o Posixmake
.E não aborda a questão do
AND
e lógicoOR
.fonte