在GNU Make中,如何将variables转换为小写?
这是一个愚蠢的问题,但是…与GNU Make:
VAR = MixedCaseText LOWER_VAR = $(VAR,lc) default: @echo $(VAR) @echo $(LOWER_VAR)
在上面的例子中,将VAR内容转换为小写的正确语法是什么? 显示的语法(以及其他所有我已经运行的)导致LOWER_VAR是一个空string。
你总是可以产生tr
LOWER_VAR = `echo $(VAR) | tr AZ az`
要么
LOWER_VAR = $(shell echo $(VAR) | tr AZ az)
您尝试调用的“lc”函数来自GNU Make标准库
假设安装,正确的语法将是
LOWER_VAR = $(call lc,$(VAR))
您可以直接在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 AZ az)
。 这样,当variables被声明时,你只调用一次shell,而不是每次引用variables!
希望有所帮助。
处理带重音的大写字母:
LOWER_VAR = $(shell echo $VAR | tr '[:upper:]' '[:lower:]')
结果:
$ VAR="Éclipse" $ echo $VAR | tr AZ az Éclipse $ echo $VAR | tr '[:upper:]' '[:lower:]' éclipse
我觉得这个稍微清洁
$(shell tr '[:upper:]' '[:lower:]' <<< $(VAR))