tutorial make example makefile

tutorial - makefile example



Makefile establecido si la variable está vacía (2)

Quiero establecer una variable si está vacía. Lo intenté de esta manera:

.... TEST := $(something) ... TEST ?= $(something else)

El primer $(something) puede devolver una cadena vacía, sin embargo, la asignación condicional? = Solo funciona si la variable anterior no está establecida, no si está vacía.

¿Alguna solución elegante para establecer la variable si está vacío?

EDITAR encontré esta solución:

.... TEST := $(something) ... TEST += $(something else) TEST := $(word 1, $(TEST))

Pero creo que habrá uno más elegante.


¿Alguna solución elegante para establecer la variable si está vacío?

GNU make es apenas conocido por soluciones elegantes. A menos que encuentre trampas y campos de minas para ser elegante. Solo conozco las dos formas de lograr lo que quieres:

  1. La ifeq estándar de ifeq / endif :

    ifeq ($(TEST),) TEST := $(something else) endif

  2. Use la función $(if) :

    TEST := $(if $(TEST),$(TEST),$(something else))

    Uno puede intentar empaquetar esa construcción en una función también, pero eso no es aconsejable. La función tendría el escollo oculto de romper de vez en cuando el $(something else) si contiene el , (para el cual solo hay soluciones provisionales). (Las funciones integradas como $(if) son inmunes a , error.)

La prueba de elegancia depende de ti.


Desde GNU make , capítulo 7.2, Sintaxis de los condicionales:

"A menudo, desea probar si una variable tiene un valor no vacío. Cuando el valor resulta de expansiones complejas de variables y funciones, las expansiones que consideraría vacías pueden contener caracteres de espacios en blanco y, por lo tanto, no se ven como vacías. Sin embargo, puede use la función de tira para evitar interpretar los espacios en blanco como un valor no vacío . Por ejemplo:

ifeq ($(strip $(foo)),) text-if-empty endif

evaluará el texto si está vacío incluso si la expansión de $ (foo) contiene caracteres de espacio en blanco ".