Estoy tratando de lograr algo como esto:
Si el usuario ejecuta make build_x version=1.0
luego muestre Building version 1.0
, else (make build_x
sin version
param) mostrar Building version latest
. Pero, ¿cuál es la clave aquí? Necesito que la versión sea -
por valor predeterminado (para poder usarlo correctamente con git
). Es por eso que uso la variable adicional version_info
para reemplazar -
con latest
.
Así que mi código se ve así:
build_x:
$(eval version ?= -)
$(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})
${INFO} "Doing checkout according to version $(version_info)..."
Sé que probablemente el problema sea con esta condición dada a if
.
¿Alguna idea?
Respuesta aceptada:
Esto funciona para mí:
version ?= -
ifeq (-,$(version))
version_info = latest
else
version_info = $(version)
endif
build_x:
@echo version_info = $(version_info)
Establece version
a -
si no está configurado, completa version_info
apropiadamente.
Uso de variables específicas del objetivo y una variante de una sola línea:
build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
@echo version_info = $(version_info)
Esto funciona de la siguiente manera (consulte la documentación general de GNU Make):
version ?= -
estableceversion
a-
si aún no está configuradoif
comprueba su primer argumento, lo evalúa para ver si está vacío o no, y se reemplaza con el segundo argumento si el primero no está vacío y el tercero si lo está$(version:-=)
evalúaversion
, reemplazando-
con la cadena vacía (:
introduce el reemplazo, la clave de búsqueda es el texto antes de=
, el reemplazo es el texto después de=
)