在 GNU Make 中,如何将变量转换为小写?
这是一个愚蠢的问题,但是...使用 GNU Make:
VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)
default:
@echo $(VAR)
@echo $(LOWER_VAR)
在上面的示例中,将 VAR 的内容转换为小写的正确语法是什么? 显示的语法(以及我遇到的其他所有内容)导致 LOWER_VAR 成为空字符串。
This is a silly question, but.... with GNU Make:
VAR = MixedCaseText
LOWER_VAR = $(VAR,lc)
default:
@echo $(VAR)
@echo $(LOWER_VAR)
In the above example, what's the correct syntax for converting VAR's contents to lower case? The syntax shown (and everything else I've run across) result in LOWER_VAR being an empty string.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
您始终可以生成 tr
或
您尝试调用的“lc”函数来自 GNU Make Standard Library
假设安装后,正确的语法是
you can always spawn off tr
or
The 'lc' functions you trying to call is from GNU Make Standard Library
Assuming that is installed , the proper syntax would be
您可以直接在 gmake 中执行此操作,无需使用 GNU Make 标准库:
它看起来有点笨重,但它可以完成工作。
如果您确实使用 $(shell) 变量,请使用
:=
而不是仅使用=
,如LOWER_VAR := $(shell echo $VAR | tr AZ az)
。 这样,您只需在声明变量时调用 shell 一次,而不是每次引用该变量时!You can do this directly in gmake, without using the GNU Make Standard Library:
It looks a little clunky, but it gets the job done.
If you do go with the $(shell) variety, please do use
:=
instead of just=
, as inLOWER_VAR := $(shell echo $VAR | tr A-Z a-z)
. That way, you only invoke the shell one time, when the variable is declared, instead of every time the variable is referenced!处理带有重音符号的大写字母:
结果:
To handle capital letters with accents:
Results:
我觉得这个稍微干净一点...
I find this slightly cleaner...
如果安装了 Python,它甚至可以在 Windows 上运行:
If Python is installed this runs even on Windows:
GNU make 不包含用于大小写转换的字符串函数。 因此,默认情况下没有定义 lc 函数。
但 GNU Make 通常会启用 GNU Guile 支持(例如 Fedora 33 上就是这种情况)。
因此,您可以调用 Guile 函数来转换大小写:
或者如果您想封装 Guile 调用:
GNU make doesn't include string functions for case conversion. Thus, there is no
lc
function defined, by default.But GNU Make usually comes with GNU Guile support enabled (e.g. this is the case on Fedora 33).
Thus, you can just call a Guile function for converting the case:
Or if you want to encapsulate the Guile call:
我在寻找解决方案时写了这篇文章。
它有点冗长,但相信它解释了步骤并在 Makefile 中保留了很长的行。
您可以轻松修改它以执行您可能想要的任何替换。
希望它能帮助某人。
I wrote this while looking for a solution.
It is a bit verbose but believe it explains the steps and keeps really long lines out on the Makefile.
You can easily be modify it to perform any substitution you may want.
Hope it helps someone.
Eric Melski 的回答给我留下了深刻的印象,我很好奇
make
如何处理递归(我正在看你的 C 预处理器)。 比原来的答案稍微复杂一些,但一个 50 年前的工具可以做的事情很有趣。 并不是说你应该使用这段代码,但我想你可以。Being impressed by the Eric Melski answer, I was curious how
make
handles recursion (I'm looking at you C preprocessor). Somewhat more involved, than original answer, but it's fascinating what a 50 years old tool can do. Not saying you should use this code, but I guess you could.