Использование Make $ (dir) или $ (notdir) на пути с пробелами

Я использую код, подобный следующему в 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)

Если я использую это в каталоге без пробелов, скажем,space-testработает нормально:

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

Однако, если я использую его в каталоге с пробелами, скажем,space test, затем$(notdir) делает неправильную вещь:

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

Что здесь происходит, так это$(notdir) толкует/tmp/space test/foo какtwo пути и возвращает «файловую часть» изboth (Т.е.space а такжеfoo). Странная часть этого в том, чтоTARGET правильно сбежал; так или иначе, внутри правила или внутри$(notdir)обратные слэши игнорируются.

Что я здесь не так делаю?

Ответы на вопрос(3)

Ваш ответ на вопрос