Usando Make $ (dir) ou $ (notdir) em um caminho com espaços

Estou usando um código semelhante ao seguinte em um Makefile:

empty:=
space:= $(empty) $(empty)
path_escape = $(subst $(space),\$(space),$(1))

TOP=$(call path_escape,$(abspath .))
TARGET=$(TOP)/foo

$(info TOP='$(TOP)')
$(info TARGET='$(TARGET)')

all: $(TARGET)

$(TARGET):
    touch '$(notdir $@)'

.PHONY: $(TARGET)

Se eu usar isso em um diretório sem espaços, digamosspace-test, Funciona bem:

$ make
TOP='/tmp/space-test'
TARGET='/tmp/space-test/foo'
touch 'foo'

No entanto, se eu usá-lo em um diretório com espaços, digamosspace test, então$(notdir) faz a coisa errada:

TOP='/tmp/space\ test'
TARGET='/tmp/space\ test/foo'
touch 'space foo'

O que está acontecendo aqui é que$(notdir) interpreta/tmp/space test/foo Comodois caminhos e retorna a "parte do arquivo" doambos (isto é,space efoo). A parte estranha disso é queTARGET está devidamente escapado; de alguma forma, dentro da regra ou dentro$(notdir), as fugas de barra invertida estão sendo ignoradas.

O que eu estou fazendo errado aqui?

questionAnswers(3)

yourAnswerToTheQuestion