В 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.
Та же проблема возникает, когда вы пишете make-файл.
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.
Есть ли хитрость, чтобы заставить пробелы работать с неявными правилами?
редактировать
Я отправил отчет об ошибке: http://lists.gnu.org/archive/html/bug-make/2011-06/msg00002.html