Verwenden Sie Make $ (dir) oder $ (notdir) für einen Pfad mit Leerzeichen

Ich verwende Code ähnlich dem folgenden in einem 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)

Wenn ich dies in einem Verzeichnis ohne Leerzeichen verwende, sagen wirspace-test, es funktioniert gut:

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

Wenn ich es jedoch in einem Verzeichnis mit Leerzeichen verwende, sagen wirspace test, dann$(notdir) macht das Falsche:

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

Was hier passiert, ist das$(notdir) interpretiert/tmp/space test/foo wiezwei Pfade und gibt den "Dateiteil" von zurückbeide (d. h.space undfoo). Der seltsame Teil davon ist dasTARGET ist ordnungsgemäß entkommen; Irgendwie in der Regel oder im Inneren$(notdir)werden die Backslash-Escapes ignoriert.

Was mache ich hier falsch?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage