
Siempre que menciono cualquier versión junto con el comando de ejecución de este archivo MAKE, esa versión debe almacenarse en la variable VERSIÓN, si no se menciona ninguna versión, se debe tomar el valor predeterminado.
Este es mi Makefile
export $(BUILDVERSION) = $2
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifneq ($(BUILDVERSION),undefined)
VERSION := $(VERS)
endif
ifneq ($(BUILDVERSION),undefined)
VERSION := $(BUILDVERSION)
endif
$(info VERSION is $(VERSION))
CASO 1: Obtengo este resultado cuando incluyo un argumento para la ejecución
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
CASO 2: Recibo este error cuando no incluyo el argumento para la ejecución
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
¿Alguien podría ayudarme a encontrar el problema con mi código?
Respuesta1
No estoy seguro, entiendo la pregunta.
Si su tarea es proporcionar un número de versión desde fuera make
y utilizar el valor predeterminado si no se proporcionó ninguna versión en la línea de comando. Entonces makefile
debería verse así:
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
Y lo llamarías con:
make BUILDVERSION="not-default-version"
Respuesta2
export $(BUILDVERSION) = $2
tl;dr; La creación de GNU no es bash.
Solo se $(BUILDVERSION)
expandiría a cualquier cosa si lo invocara make
como make BUILDVERSION=something
, lo que hará que esa línea a) se defina something
comomacro similar a una funciónque se expandirá a su segundo argumento cuando se use como $(call something, ...)
, y b) exportar unvacíoVariable de entorno nombrada something
para los comandos que se ejecutan desde las reglas de creación.
Si BUILDVERSION
no está definido o está definido en una cadena vacía, obtendrá ese empty variable name
error.
$ make -f - <<'EOT' BUILDVERSION=something
export $(BUILDVERSION) = $2
all:; set | grep ^something; echo XXX $(call something,first,second)
EOT
set | grep ^something; echo XXX second
something=''
XXX second
$2
hacenoexpanda al segundo argumento pasado en la línea de comando de make, porque... make no es bash.