Sto cercando di ottenere qualcosa del genere:
Se l'utente eseguirà make build_x version=1.0
quindi mostra Building version 1.0
, altrimenti (make build_x
senza version
param) mostra Building version latest
. Ma qual è la chiave qui? Ho bisogno che la versione sia -
di default (per poterlo usare correttamente con git
). Questo è il motivo per cui utilizzo la variabile aggiuntiva version_info
per la sostituzione di -
con latest
.
Quindi il mio codice è simile a questo:
build_x:
$(eval version ?= -)
$(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})
${INFO} "Doing checkout according to version $(version_info)..."
So che probabilmente il problema è con questa condizione data a if
.
Qualche idea?
Risposta accettata:
Questo funziona per me:
version ?= -
ifeq (-,$(version))
version_info = latest
else
version_info = $(version)
endif
build_x:
@echo version_info = $(version_info)
Imposta version
a -
se non è impostato, compila version_info
in modo appropriato.
Utilizzando variabili specifiche del target e una variante one-liner:
build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
@echo version_info = $(version_info)
Funziona come segue (vedi la documentazione generale di GNU Make):
version ?= -
impostaversion
a-
se non è già impostatoif
controlla il suo primo argomento, lo valuta per vedere se è vuoto o meno e viene sostituito con il secondo argomento se il primo non è vuoto e il terzo se lo è$(version:-=)
valutaversion
, sostituendo-
con la stringa vuota (:
introduce la sostituzione, la chiave di ricerca è il testo prima di=
, la sostituzione è il testo dopo=
)