web-dev-qa-db-fra.com

Dans GNU Make, comment convertir une variable en minuscules?

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.

48
DonGar

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))
48
vrdhn

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.

44
Eric Melski

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
18
Rei Vilo

Je trouve ça un peu plus propre ...

$(Shell tr '[:upper:]' '[:lower:]' <<< $(VAR))
3
altendky