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 ?= -impostaversiona-se non è già impostatoifcontrolla 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=)