2011-06-23 14 views
24

Me gustaría verificar múltiples condiciones en un if loop del archivo GNU make. Aquí hay un ejemplo:Makefile ifeq logical AND

ifeq ($(TEST_FLAG),TRUE && ($(DEBUG_FLAG),FALSE)) 
true statement 
else 
false statement 
endif 

¿Cuál es la forma correcta de hacerlo?

Respuesta

25

Puede usar ifeq con una concatenación de sus valores, ej.

ifeq ($(TEST_FLAG)$(DEBUG_FLAG),TRUEFALSE) 
    do something 
endif 

También es posible utilizar las funciones condicionales, que son más susceptibles de ser utilizadas en un bucle (como ifeq probablemente no hacer lo que se espera en un bucle, que se pondrá a prueba una sola vez).

+0

creo que el espacio inicial antes de 'TRUEFALSE' _breaks_ el cheque y nunca va a funcionar porque' ifeq' es muy sensible con respecto a un espacio líder. ¿Puedes verificarlo y si estoy en lo correcto edita tu respuesta? –

+0

@AlBundy: espacio eliminado, gracias. – Hasturkun

19

Aunque la solución de Hasturkun va a funcionar, creo que la forma idiomática para escribir esto es:

ifeq ($(TEST_FLAG),TRUE) 
ifeq ($(DEBUG_FLAG),FALSE) 
# Stuff 
endif 
endif 
+0

debería la parte más para que la declaración falsa se ejecute –

+0

Tengo problemas cuando ifeq tiene otras cosas como: 'ifeq() ... ifeq() ... endif else ... ifeq() ... endif .. . endif'. Me sale el error 'else 'extraño. – NickSoft

+1

¿Qué sucede si quiero usar o? –