Как объединить строки в Makefile? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть Makefile, который запускает pandoc. Я хочу включить список расширений:

PANDOC_EXTENSIONS = \
        multiline_tables \
        some_other_extension

в строку, которая выглядит следующим образом:

PANDOC_EXTENSION_LIST = +multiline_tables+some_other_extension

, который затем будет передан как параметр командной строки в pandoc следующим образом:

pandoc --from$(PANDOC_EXTENSION_LIST) ...

Это тривиально почти на любом языке программирования, но я не могу понять, как это сделать с помощью функций patsubst или subst, поскольку в make нет списков. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

На основе примера в документации :

empty:=
space:=$(empty) $(empty)
PANDOC_EXTENSIONS = \
        multiline_tables \
        some_other_extension

all:
    @echo +$(subst ${space},+,${PANDOC_EXTENSIONS})

Результат:

$ gmake                                                                                                    
+multiline_tables+some_other_extension
0 голосов
/ 02 ноября 2018

Здесь:

Makefile

PANDOC_EXTENSIONS = \
        multiline_tables \
        some_other_extension


$(foreach word,$(PANDOC_EXTENSIONS),$(eval PANDOC_EXTENSION_LIST := $(PANDOC_EXTENSION_LIST)+$(word)))

.PHONY: all

all:
    echo $(PANDOC_EXTENSION_LIST)

Который работает как:

$ make
echo +multiline_tables+some_other_extension
+multiline_tables+some_other_extension

Как это видно, GNU make действительно имеет списки. Последовательность слов, разделенных пробелами, представляет собой список.

...