2013-03-15 2 views
1

У меня есть строка в моей Makefile, что о чем-то вроде этого:Makefile не расширяется glob из-за zsh?

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

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

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

+1

Помимо приведенных ниже ответов, отмечают, что делают _always_ работает/bin/sh, когда он вызывает оболочку. Он не запускает какую-либо оболочку, которую пользователь предпочитает (представьте, какой будет переносимость катастрофы!) Расширение Curly-brace не является частью стандарта POSIX для sh, поэтому/bin/sh часто не поддерживает его. – MadScientist

+0

Вы можете установить 'SHELL''/bin/zsh' в свой файл Makefile, но это приводит к катастрофе переноса, упомянутой @MadScientist (если у кого-то, использующего ваш Makefile, нет '/ bin/zsh', Makefile выиграл ' t работа для них). – chepner

ответ

1

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

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

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

my_rule: 
    prog $(FILES) 
+1

Я думаю, вы имели в виду 'FILE_SUFFIXES: = один два три'. – bobbogo

+0

@bobbogo - Да! Хороший улов :) – Tuxdude

1

Должно ли это быть оболочкой расширенной? 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} 
Смежные вопросы