Ich versuche so etwas zu erreichen:
Wenn der Benutzer make build_x version=1.0
ausführt zeigen Sie dann Building version 1.0
, sonst (make build_x
ohne version
param) show Building version latest
. Aber was ist hier der Schlüssel – ich muss Version -
sein als Standardwert (um es richtig mit git
verwenden zu können ). Deshalb verwende ich die zusätzliche Variable version_info
zum Ersetzen von -
mit latest
.
Mein Code sieht also so aus:
build_x:
$(eval version ?= -)
$(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})
${INFO} "Doing checkout according to version $(version_info)..."
Ich weiß, dass wahrscheinlich ein Problem mit dieser Bedingung für if
besteht .
Irgendwelche Ideen?
Akzeptierte Antwort:
Das funktioniert bei mir:
version ?= -
ifeq (-,$(version))
version_info = latest
else
version_info = $(version)
endif
build_x:
@echo version_info = $(version_info)
Es setzt version
zu -
wenn nicht gesetzt, dann version_info
ausfüllen angemessen.
Verwendung von zielspezifischen Variablen und einer Einzeiler-Variante:
build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
@echo version_info = $(version_info)
Dies funktioniert wie folgt (siehe die gesamte GNU Make-Dokumentation):
version ?= -
setztversion
zu-
falls es noch nicht eingestellt istif
überprüft sein erstes Argument, wertet es aus, um zu sehen, ob es leer ist oder nicht, und wird durch das zweite Argument ersetzt, wenn das erste nicht leer ist, und durch das dritte Argument, wenn es leer ist$(version:-=)
wertetversion
aus , wobei-
ersetzt wird mit dem leeren String (:
führt die Ersetzung ein, der Suchschlüssel ist der Text vor=
, die Ersetzung ist der Text nach=
)