C'est une question idiote, mais .... avec GNU Make:
VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)
default:
@echo $(VAR)
@echo $(LOWER_VAR)
Dans l'exemple ci-dessus, quelle est la syntaxe correcte pour convertir le contenu de VAR en minuscules? La syntaxe indiquée (et tout ce que j'ai rencontré) fait que LOWER_VAR est une chaîne vide.
vous pouvez toujours frayer tr
LOWER_VAR = `echo $(VAR) | tr A-Z a-z`
ou
LOWER_VAR = $(Shell echo $(VAR) | tr A-Z a-z)
Les fonctions 'lc' que vous essayez d'appeler proviennent de GNU Make Standard Library
En supposant qu'il soit installé, la syntaxe appropriée serait
LOWER_VAR = $(call lc,$(VAR))
Vous pouvez le faire directement dans gmake, sans utiliser le GNU Make Standard Library:
lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
VAR = MixedCaseText
LOWER_VAR = $(call lc,$(VAR))
all:
@echo $(VAR)
@echo $(LOWER_VAR)
Il semble un peu maladroit, mais il fait le travail.
Si vous optez pour la variété $ (Shell), veuillez utiliser :=
Au lieu de simplement =
, Comme dans LOWER_VAR := $(Shell echo $VAR | tr A-Z a-z)
. De cette façon, vous n'appelez le shell qu'une seule fois, lorsque la variable est déclarée, au lieu de chaque fois que la variable est référencée!
J'espère que cela pourra aider.
Pour gérer les majuscules avec des accents:
LOWER_VAR = $(Shell echo $VAR | tr '[:upper:]' '[:lower:]')
Résultats:
$ VAR="Éclipse"
$ echo $VAR | tr A-Z a-z
Éclipse
$ echo $VAR | tr '[:upper:]' '[:lower:]'
éclipse
Je trouve ça un peu plus propre ...
$(Shell tr '[:upper:]' '[:lower:]' <<< $(VAR))