Как я могу напечатать переменную, содержащую список имен файлов, каждое имя файла в отдельной строке? - PullRequest
0 голосов
/ 26 сентября 2018

Переменная в моем make-файле содержит длинный список файлов, разделенных пробелом.Мне нужно просмотреть этот список, но так как имена файлов разделены пробелом, это не очень легко сделать.Поэтому я хотел бы распечатать список, но там, где каждое имя файла разделено новой строкой.

Вот моя попытка:

SOME_VARIABLE := I want this to be on separate lines
SOME_VARIABLE_SPLIT := $(subst ' ','\n',$(SOME_VARIABLE))
$(info $(SOME_VARIABLE_SPLIT))

Вывод:

Я хочу, чтобы это было в отдельных строках

Как напечатать переменную, содержащую имена файлов, разделенные пробелами, с каждым именем файла в отдельной строке?

1 Ответ

0 голосов
/ 26 сентября 2018

Ваша проблема связана с тем, как работает subst: ваши кавычки и обратные слеши воспринимаются буквально.

Решение состоит в том, чтобы сначала определить две переменные, содержащие пробел и символ новой строки:

# $(NULL) is empty string
NULL  :=
# $(SPACE) is one space
SPACE := $(NULL) $(NULL)
# $(\n) is new line
define \n


endef

, а затем использовать их в подстановке:

SOME_VARIABLE       := I want this to be on separate lines
SOME_VARIABLE_SPLIT := $(subst $(SPACE),$(\n),$(SOME_VARIABLE))

$(info $(SOME_VARIABLE_SPLIT))

Примечания:

  • да, вам нужна эта пустая переменная NULL, чтобы определить переменную, значением которой является пробел,
  • да, вы можете назвать переменную make \n;может быть, не самая лучшая вещь для удобства чтения (читатели могут быть озадачены), но достаточно забавная, чтобы использовать ее в любом случае,
  • и да, вам нужно две строки в операторе define, чтобы получить только один в конце.
...