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 ?= -estableceversiona-si aún no está configuradoifcomprueba 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=)