在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))