Usar Make $ (dir) o $ (notdir) en una ruta con espacios

Estoy usando un código similar al siguiente en un 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)

Si uso esto en un directorio sin espacios, digaspace-test, funciona bien:

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

Sin embargo, si lo uso en un directorio con espacios, digamosspace test, entonces$(notdir) hace lo incorrecto:

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

Lo que pasa aquí es que$(notdir) interpreta/tmp/space test/foo comodos rutas y devuelve la "parte del archivo" deambos (es decir.,space yfoo). La parte rara de esto es queTARGET se escapó adecuadamente; De alguna manera, dentro de la regla o dentro.$(notdir), los escapes de barra invertida están siendo ignorados.

¿Qué estoy haciendo mal aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta