gnu - 在 GNU Make 中,如何将路径的驱动器替换为小写?

标签 gnu gnu-make substitution lowercase

在 GNU Make 中,目前我正在使用以下替换来降低驱动器号的大小写。

$(eval _ABS_PATH=$(subst C:,c:,$(abspath $(DIRECTORY))))

如何修改此设置,以便可以将驱动器号的 A-Z 替换为 a-z?

谢谢!

最佳答案

我不确定你为什么在这里使用 eval ;为什么不只是:

_ABS_PATH = $(subst C:,c:,$(abspath $(DIRECTORY)))

但是,无论如何,任何时候你需要在 GNU 中做一些非常聪明的字符串翻译等事情,我敢打赌 John Graham-Cumming 已经为你做到了。看看他最优秀的工具包GMSL (GNU Make Standard Library)对于许多常见的功能。其中包括 lc(小写)的变体。您可以获取一份副本,而不是在此处复制它(连同版权声明,因为它采用 BSD 许可证)。

一旦你有了它,如果你想要整个路径小写,你可以这样做:

include gmsl
_ABS_PATH = $(call lc,$(abspath $(DIRECTORY)))

如果您只希望驱动器号小写,而不是其余部分,那么它会更复杂,这样的事情应该可以工作:

include gmsl
_DRIVE = $(word 1,$(subst :, ,$(abspath $(DIRECTORY))))
_ABS_PATH = $(call lc,$(_DRIVE)):$(patsubst $(_DRIVE):%,%,$(abspath $(DIRECTORY)))

可能还有更简单的方法。另外,如果您确定 DIRECTORY 的值已经设置,您应该考虑在此处使用“:=”而不是“=”,因为它会让事情变得更加高效(特别是如果 $(_ABS_PATH) 被大量使用)。

关于gnu - 在 GNU Make 中,如何将路径的驱动器替换为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360059/

相关文章:

C++11 std::regex_match 返回额外字符

c - 为什么在这个 Makefile 中只处理了一个变量的文件列表的一部分?

unix - 特殊 make 目标的依赖项 .DEFAULT 未触发

ruby - 替换字符但不是最后一个

c++ - 在 Windows 7 中安装 Subversion(以及一般的 C 库)

macos - gsed 是否有相对大小写说明符?

passwords - 使用 tar 压缩带密码的文件 tar.gz

c++ - 在代码中访问 Makefile 变量?

vim - 如何从 VIM 中的字符串列表进行替换?

google-chrome - Chrome 字符替换