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?