Makefile: вернуть первые два символа строки - PullRequest
3 голосов
/ 18 августа 2011

Учитывая строку в Makefile, возможно ли извлечь первые два символа неизвестной строки, используя синтаксис Makefile (без использования вызовов оболочки)?

, например,

VAR := UnKnown
VAR_TERSE = $(call get_first_two_chars, $(VAR))

define get_first_two_char
...
endef

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Ну, это можно сделать, но это довольно грязно, чтобы реализовать вручную.Самое простое, что можно сделать - это получить стандартную библиотеку GNU Make , которая имеет встроенную функцию substr.Если это излишне, вы можете извлечь только эту функцию из библиотеки, но, как я уже сказал, она на удивление грязная.

По сути, вы делаете серию подстановок в строке, чтобы вставить пробел после каждого символа:

EMPTY:=
SPACE:=$(EMPTY) $(EMPTY)
VAR := UnKnown
TMP:=$(subst a,a ,$(subst b,b ,$(subst c,c ,.........$(VAR)))))
# TMP now has "U n K n o w n"

Далее вы можете использовать функцию $(wordlist), чтобы получить первые два "слова"промежуточного результата:

TMP2:=$(wordlist 1,2,$(TMP))
# TMP2 now has "U n"

Наконец, вы снова используете $(subst), чтобы убрать пространство, изначально введенное вами:

VAR_TERSE := $(subst $(SPACE),,$(TMP2))
# VAR_TERSE now has "Un"
2 голосов
/ 18 августа 2011

Я действительно не одобряю заставлять Make делать вещи, которые он явно не хочет делать, но ... я не могу удержаться от хорошей головоломки.

$(eval FOO := $$$(VAR))
$(eval FOO := $$$(FOO))
VAR_TERSE:= $(VAR:$(FOO)=)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...