В GNU Make как преобразовать переменную в нижний регистр? - PullRequest
48 голосов
/ 20 марта 2009

Это глупый вопрос, но .... с GNU Make:

VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)

default:
        @echo $(VAR)
        @echo $(LOWER_VAR)

В приведенном выше примере, каков правильный синтаксис для преобразования содержимого VAR в нижний регистр? Показанный синтаксис (и все остальное, с чем я столкнулся) приводит к тому, что LOWER_VAR является пустой строкой.

Ответы [ 4 ]

48 голосов
/ 20 марта 2009

вы всегда можете возродить tr

LOWER_VAR = `echo $(VAR) | tr A-Z a-z`

или

LOWER_VAR  = $(shell echo $(VAR) | tr A-Z a-z)

Функции 'lc', которые вы пытаетесь вызвать, взяты из GNU Make Standard Library

Предполагается, что установлен правильный синтаксис:

LOWER_VAR  = $(call lc,$(VAR))
44 голосов
/ 20 марта 2009

Вы можете сделать это прямо в gmake, без использования стандартной библиотеки GNU Make:

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)

Это выглядит немного неуклюже, но это делает работу.

Если вы используете вариант $ (shell), пожалуйста, используйте := вместо =, как в LOWER_VAR := $(shell echo $VAR | tr A-Z a-z). Таким образом, вы вызываете оболочку только один раз, когда переменная объявлена, а не каждый раз, когда на нее ссылаются!

Надеюсь, это поможет.

18 голосов
/ 09 июня 2012

Для обработки заглавных букв с акцентами:

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

Результаты:

$ VAR="Éclipse"
$ echo $VAR | tr A-Z a-z
Éclipse
$ echo $VAR | tr '[:upper:]' '[:lower:]'
éclipse
3 голосов
/ 26 июля 2013

Я нахожу это немного чище ...

$(shell tr '[:upper:]' '[:lower:]' <<< $(VAR))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...