Использование 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)
обратные слэши игнорируются.
Что я здесь не так делаю?