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.
メイクファイルを作成するときにも同じ問題が発生します。
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