Dans GNU Make, comment convertir une variable en minuscule?

C’est une question stupide, 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 affichée (et tout ce que j’ai déjà vu) fait que LOWER_VAR est une chaîne vide.

vous pouvez toujours bash tr

 LOWER_VAR = `echo $(VAR) | tr AZ az` 

ou

 LOWER_VAR = $(shell echo $(VAR) | tr AZ az) 

Les fonctions ‘lc’ que vous essayez d’appeler proviennent de GNU Make Standard Library

En supposant que soit installé, la syntaxe correcte serait

 LOWER_VAR = $(call lc,$(VAR)) 

Vous pouvez le faire directement dans gmake, sans utiliser la bibliothèque GNU Make Standard:

 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) 

Ça a l’air un peu maladroit, mais ça fait le boulot.

Si vous utilisez la variété $ (shell), veuillez utiliser := au lieu de just = , comme dans LOWER_VAR := $(shell echo $VAR | tr AZ az) . De cette façon, vous n’invoquez le shell qu’une seule fois, lorsque la variable est déclarée, et non chaque fois que la variable est référencée!

J’espère que cela pourra aider.

Pour traiter les majuscules avec des accents:

 LOWER_VAR = $(shell echo $VAR | tr '[:upper:]' '[:lower:]') 

Résultats:

 $ VAR="Éclipse" $ echo $VAR | tr AZ az Éclipse $ echo $VAR | tr '[:upper:]' '[:lower:]' éclipse 

Je trouve ce peu plus propre …

 $(shell tr '[:upper:]' '[:lower:]' <<< $(VAR))