В GNU Make, как подставить диск пути в нижний регистр? - PullRequest
2 голосов
/ 20 февраля 2012

В GNU Make в настоящее время я уменьшаю регистр буквы диска, используя следующую замену.

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

Как я могу изменить это так, чтобы я мог заменить A-Z на a-z для буквы диска?

Спасибо!

1 Ответ

2 голосов
/ 26 февраля 2012

Я не уверен, почему вы используете 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)).

...