configurar - makefile windows
Verificación de condiciones complejas en Makefile. (1)
Si su make
es GNU-make y todas las variables definidas incluyen un carácter que no es espacio,
ifdef VAR1 && VAR2 && VAR3
Se puede escribir como
ifneq ($(and $(VAR1),$(VAR2),$(VAR3)),)
En una nota relacionada, probablemente and
función requiera la versión 3.81 o posterior.
En caso de que algunas variables definidas sean cadenas vacías, si preparamos las siguientes funciones:
ifndef_any_of = $(filter undefined,$(foreach v,$(1),$(origin $(v))))
ifdef_any_of = $(filter-out undefined,$(foreach v,$(1),$(origin $(v))))
entonces las siguientes condiciones:
ifdef VAR1 || VAR2
ifdef VAR1 && VAR2
Pueden escribirse respectivamente como:
ifneq ($(call ifdef_any_of,VAR1 VAR2),)
ifeq ($(call ifndef_any_of,VAR1 VAR2),)
En mi Makefile me gustaría comprobar la siguiente condición compleja:
ifdef VAR1 || VAR2 || VAR3
action
endif
sin embargo, la documentación dice que la sintaxis no está soportada. Así que la única solución simple que se me ocurrió es usar la concatenación:
ifneq ($(VAR1)$(VAR2)$(VAR3),)
action
endif
¿Hay alguna otra solución más correcta?
Para el siguiente caso:
ifdef VAR1 && VAR2 && VAR3
action
endif
uno necesita escribir
ifdef VAR1
ifdef VAR2
ifdef VAR3
action
endif
endif
endif
que también es feo. ¿Hay alternativas más elegantes?