Как получить правила шаблона, чтобы сопоставить имена файлов с пробелами в Makefile?

В GNU make docs документально зафиксировано, что '%' соответствует "любой непустой подстроке". Однако, кажется, что на самом деле оно совпадает только с непустыми подстроками, которые не содержат пробела. Например, скажем, что вы делаете это:

mkdir /tmp/foo
cd /tmp/foo
echo 'int main() { return 0; }' > "test.c"
echo 'int main() { return 0; }' > "test space.c"

Теперь вы должны быть в состоянии собрать их, используя встроенные в GNU Make правила шаблонов:

anthony@Zia:/tmp/foo$ make "test"
cc     test.c   -o test
anthony@Zia:/tmp/foo$ make "test space"
make: *** No rule to make target `test space'.  Stop.

Та же самая проблема возникает, когда вы пишете makefile.

anthony@Zia:/tmp/foo$ rm test
anthony@Zia:/tmp/foo$ echo 'all: test test\ space' > Makefile 
anthony@Zia:/tmp/foo$ make
cc     test.c   -o test
make: *** No rule to make target `test space', needed by `all'.  Stop.

Даже если вы явно добавите в %: правило %.c, результат будет тот же самый. Но если вы явно добавите в makefile такое правило, то это сработает:

test\ space: test\ space.c
    $(CC) -o "$@" "$<"     # first char is tab, of course.

Есть ли трюк, чтобы заставить пробелы работать с неявными правилами?

edit

I've sent a bug report: http://lists.gnu.org/archive/html/bug-make/2011-06/msg00002.html

6
задан derobert 7 June 2011 в 21:18
поделиться