Этот метод также позволит использовать перечисленные имена файлов, такие как $?
и пользовательские переменные, которые являются списками файлов.
Лучший способ справиться с пробелами в Make - это заменить пробелы другими символами.
s+ = $(subst \ ,+,$1)
+s = $(subst +,\ ,$1)
$(call s+,foo bar): $(call s+,bar baz) $(call s+,bar\ baz2)
# Will also shows list of dependencies with spaces.
@echo Making $(call +s,$@) from $(call +s,$?)
$(call s+,bar\ baz):
@echo Making $(call +s,$@)
$(call s+,bar\ baz2):
@echo Making $(call +s,$@)
Выходы
Making bar baz
Making bar baz2
Making foo bar from bar baz bar baz2
Затем вы можете безопасно манипулировать списками имен файлов, используя все GNU Make.
функции. Обязательно удалите + перед использованием этих имен в правиле.
SRCS := a\ b.c c\ d.c e\ f.c
SRCS := $(call s+,$(SRCS))
# Can manipulate list with substituted spaces
OBJS := $(SRCS:.c=.o)
# Rule that has object files as dependencies.
exampleRule:$(call +s,$(OBJS))
# You can now use the list of OBJS (spaces are converted back).
@echo Object files: $(call +s,$(OBJS))
a\ b.o:
# a b.o rule commands go here...
@echo in rule: a b.o
c\ d.o:
e\ f.o:
Выходы
in rule: a b.o
Object files: a b.o c d.o e f.o
Эта информация взята из блога , который публиковали все остальные.
Большинство людей, похоже, рекомендуют не использовать пробелы в путях или использовать пути Windows 8.3, но если вам нужно использовать пробелы, экранирование пробелов и подстановочные работы.