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