【问题标题】:In GNU Make, how do I subst a path's drive to lower case?在 GNU Make 中,如何将路径的驱动器替换为小写?
【发布时间】:2012-02-20 11:02:19
【问题描述】:

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

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

如何修改它,以便我可以将 A-Z 替换为 a-z 作为驱动器号?

谢谢!

【问题讨论】:

  • 为什么需要小写? Windows 文件系统接口不区分大小写。

标签: gnu gnu-make substitution lowercase


【解决方案1】:

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

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

但是,无论如何,只要您需要在 GNU make 中对字符串翻译等做一些非常聪明的事情,就可以肯定 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) 的情况下)。

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多