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