这是一个愚蠢的问题,但....与GNU Make:
VAR = MixedCaseText LOWER_VAR = $(VAR,lc) default: @echo $(VAR) @echo $(LOWER_VAR)
在上面的例子中,将VAR的内容转换为小写的正确语法是什么?显示的语法(以及我遇到的其他所有内容)导致LOWER_VAR为空字符串.
你总能产生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))
您可以直接在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)
它看起来有点笨重,但它完成了工作.
如果你用$(壳)品种去,请不要使用:=
,而不是只=
,如LOWER_VAR := $(shell echo $VAR | tr A-Z a-z)
.这样,您只在声明变量时调用shell一次,而不是每次引用变量时调用shell!
希望有所帮助.
处理带重音的大写字母:
LOWER_VAR = $(shell echo $VAR | tr '[:upper:]' '[:lower:]')
结果:
$ VAR="Éclipse" $ echo $VAR | tr A-Z a-z Éclipse $ echo $VAR | tr '[:upper:]' '[:lower:]' éclipse