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 ?= -setztversionzu-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:-=)wertetversionaus , 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=)