2
在GNU Make中,目前我使用下面的替換來降低驅動器盤符的大小寫。在GNU Make中,如何將路徑的驅動器替換爲小寫?
$(eval _ABS_PATH=$(subst C:,c:,$(abspath $(DIRECTORY))))
我該如何修改這個,使得我可以將A-Z替換爲a-z作爲驅動器盤符?
謝謝!
在GNU Make中,目前我使用下面的替換來降低驅動器盤符的大小寫。在GNU Make中,如何將路徑的驅動器替換爲小寫?
$(eval _ABS_PATH=$(subst C:,c:,$(abspath $(DIRECTORY))))
我該如何修改這個,使得我可以將A-Z替換爲a-z作爲驅動器盤符?
謝謝!
我不知道你爲什麼在這裏使用eval;爲什麼不乾脆:
_ABS_PATH = $(subst C:,c:,$(abspath $(DIRECTORY)))
但是,不管怎樣,任何時候你需要做的事情與字符串翻譯等在GNU大量巧妙的使有約翰·格雷厄姆 - 卡明已經做對你是個不錯的選擇。查看他最優秀的工具包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))。
爲什麼你需要它小寫? Windows文件系統接口不區分大小寫。 – 2012-02-20 15:32:19