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

时间:2012-02-20 11:02:20

标签: gnu gnu-make substitution lowercase

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

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

如何修改这个以便我可以用A-Z替换a-z作为驱动器号?

谢谢!

1 个答案:

答案 0 :(得分:2)

我不确定你为什么在这里使用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))。