Makefile не расширяет глобус из-за zsh?

У меня есть строка в моем Makefile примерно такого содержания:

prog /something/f.{one,two,three}

но запустив make файл я получаю от проги что

/something/f.{one,two,three} не существует. Это наводит меня на мысль, что make не расширяет шар. Обычно это работало бы для меня в Bash, но сейчас я использую zshell, поэтому я думаю, что проблема в этом. Кто-нибудь знает, как указать этот шаблон переносимо?


person rgrinberg    schedule 15.03.2013    source источник
comment
В дополнение к приведенным ниже ответам обратите внимание, что make всегда запускает /bin/sh при вызове оболочки. Он не запускает ту оболочку, которую предпочитает пользователь (представьте, какая это была бы катастрофа с переносимостью!) Расширение фигурных скобок не является частью стандарта POSIX для sh, поэтому /bin/sh часто его не поддерживает.   -  person MadScientist    schedule 15.03.2013
comment
Вы можете установить SHELL в /bin/zsh в вашем Makefile, но это приведет к катастрофе с переносимостью, упомянутой @MadScientist (если кто-то, использующий ваш Makefile, не имеет /bin/zsh, Makefile не будет работать для них).   -  person chepner    schedule 15.03.2013


Ответы (2)


Альтернативой тому, что предложил ThePosey, было бы использование addprefix:

FILE_SUFFIXES := one two three
FILE_BASE := /something/f

FILES := $(addprefix $(FILE_BASE).,$(FILE_SUFFIXES))

my_rule:
    prog $(FILES)
person Tuxdude    schedule 15.03.2013
comment
Я думаю, вы имели в виду FILE_SUFFIXES := one two three. - person bobbogo; 15.03.2013
comment
@bobbogo - Ага! Хороший улов :) - person Tuxdude; 15.03.2013

Нужно ли расширять оболочку? Make может сделать что-то подобное для вас. Это всего лишь один из способов сделать это:

EXPANDED_POSTFIX := one two three
BASE_FILE := f.

PROG_FILE_LIST := $(foreach post,${EXPANDED_POSTFIX},${BASE_FILE}${post})

exec_prog:
    prog ${PROG_FILE_LIST}
person ThePosey    schedule 15.03.2013