Заполнение чисел в GNU Makefiles - PullRequest
0 голосов
/ 12 марта 2012

В GNU Make у вас есть список чисел:

NUMBERS = 8 9 10

Как вы можете дополнить их начальными нулями?

NUMBERS = 08 09 10

Ответы [ 2 ]

4 голосов
/ 12 марта 2012

Кажется, что Make (по крайней мере, GNU Make) не имеет функций, которые бы хорошо справлялись с данными этого типа. Вы можете сойти с ума и использовать оболочку (только для юниксов):

NUMBERS = 8 9 10
NUMBERS2=$(foreach v,$(NUMBERS),$(shell printf '%02d' $(v)))
all:
    echo $(NUMBERS2)

Напечатает:

08 09 10
2 голосов
/ 12 марта 2012

Если каждое число не слишком велико, вы можете реализовать его следующим образом:

__seq = $(foreach i,$(seq1),$(addprefix $i,$1))
seq1 := 0 1 2 3 4 5 6 7 8 9
seq2 := $(call __seq,$(seq1))
seq3 := $(call __seq,$(seq2))

# Args:
#   1. Padding (1, 2, or 3)
#   2. Numbers
pad = $(strip \
    $(foreach n,$2, \
        $(if $(subst 0,,$n), \
            $(word $n,$(wordlist 2,$(words $(seq$1)),$(seq$1))), \
            $(firstword $(seq$1)))))

NUMBERS := 8 9 10

all:
    echo $(call pad,2,$(NUMBERS))
...