makefile - configurar - En GNU Make, ¿cómo convierto una variable a minúscula?
makefile windows (4)
Encuentro esto ligeramente más limpio ...
$(shell tr ''[:upper:]'' ''[:lower:]'' <<< $(VAR))
Esta es una pregunta tonta, pero .... con GNU Make:
VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)
default:
@echo $(VAR)
@echo $(LOWER_VAR)
En el ejemplo anterior, ¿cuál es la sintaxis correcta para convertir los contenidos de VAR en minúsculas? La sintaxis que se muestra (y todo lo demás que he encontrado) hace que LOWER_VAR sea una cadena vacía.
Para manejar letras mayúsculas con acentos:
LOWER_VAR = $(shell echo $VAR | tr ''[:upper:]'' ''[:lower:]'')
Resultados:
$ VAR="Éclipse"
$ echo $VAR | tr A-Z a-z
Éclipse
$ echo $VAR | tr ''[:upper:]'' ''[:lower:]''
éclipse
Puede hacer esto directamente en gmake, sin utilizar la biblioteca 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)
Parece un poco torpe, pero hace el trabajo bien.
Si va con la variedad $ (shell), use :=
lugar de simplemente =
, como en LOWER_VAR := $(shell echo $VAR | tr AZ az)
. De esta forma, solo invocarás el intérprete una vez, cuando se declare la variable, en lugar de cada vez que se haga referencia a la variable.
Espero que ayude.
siempre puedes engendrar tr
LOWER_VAR = `echo $(VAR) | tr A-Z a-z`
o
LOWER_VAR = $(shell echo $(VAR) | tr A-Z a-z)
Las funciones ''lc'' que intentas invocar provienen de GNU Make Standard Library
Suponiendo que está instalado, la sintaxis adecuada sería
LOWER_VAR = $(call lc,$(VAR))