J'essaie d'obtenir quelque chose comme ceci :
Si l'utilisateur exécute make build_x version=1.0
puis affichez Building version 1.0
, sinon (make build_x
sans version
param) show Building version latest
. Mais quelle est la clé ici - j'ai besoin de la version -
par défaut (pour pouvoir l'utiliser correctement avec git
). C'est pourquoi j'utilise la variable supplémentaire version_info
pour remplacer -
avec latest
.
Donc mon code ressemble à ceci :
build_x:
$(eval version ?= -)
$(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})
${INFO} "Doing checkout according to version $(version_info)..."
Je sais que le problème est probablement avec cette condition donnée à if
.
Des idées ?
Réponse acceptée :
Cela fonctionne pour moi :
version ?= -
ifeq (-,$(version))
version_info = latest
else
version_info = $(version)
endif
build_x:
@echo version_info = $(version_info)
Il définit version
à -
si non défini, alors remplit version_info
de manière appropriée.
Utilisation de variables spécifiques à la cible et d'une variante à une ligne :
build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
@echo version_info = $(version_info)
Cela fonctionne comme suit (voir la documentation générale de GNU Make) :
version ?= -
définitversion
à-
s'il n'est pas déjà définiif
vérifie son premier argument, l'évalue pour voir s'il est vide ou non, et est remplacé par le deuxième argument si le premier n'est pas vide, et le troisième s'il l'est$(version:-=)
évalueversion
, remplaçant-
avec la chaîne vide (:
introduit le remplacement, la clé de recherche est le texte avant=
, le remplacement est le texte après=
)