Подтвердить что ты не робот

В GNU Make, как мне преобразовать переменную в нижний регистр?

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

VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)

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

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

4b9b3361

Ответ 1

вы всегда можете вывести 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))

Ответ 2

Вы можете сделать это прямо в gmake, не используя 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)

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

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

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

Ответ 3

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

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

Результаты:

$ VAR="Éclipse"
$ echo $VAR | tr A-Z a-z
Éclipse
$ echo $VAR | tr '[:upper:]' '[:lower:]'
éclipse

Ответ 4

Я считаю это немного чище...

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