Как разбить строку на строки в Makefile без пробелов?
в файле makefile, избегая новой строки с позволяет разделить однострочное длинное строковое содержимое на несколько исходных строк. Однако новая строка заменяется пробелом. Есть прозрачные строки в источнике, который не влияет на содержимое строки?
VAR=w
o
r
d
all:
echo $(VAR)
желаемый выход - "слово", но фактический выход - "w o r d".
2 ответов
самое простое решение-использовать $\<newline>
разделить
строка (по крайней мере, если вы используете GNU Make):
VAR = w$\
o$\
r$\
d
all:
echo $(VAR)
вывод будет "word" без пробелов. Это потому что GNU
Make заменит обратную косую черту-новую строку-пробелы одним
пробел, выполнение задания на VAR
равной:
VAR = w$ o$ r$ d
от
https://www.gnu.org/software/make/manual/html_node/Reference.html#Reference:
"Знак доллара, за которым следует символ, отличный от знак доллара,
open-скобка или open-brace рассматривает этот символ как
имя переменной."Так $<space>
пар экспансии
переменная, имя которой является одним пробелом. После этого
переменная не определена по умолчанию, она будет расширяться в пустую
строка.
обратите внимание, что переменная VAR
все еще будет содержать
$<space>
пары, пока он не будет расширен. Большую часть времени, это
не имеет значения, но если ваш Makefile зависит от использования
$(value VAR)
для обработки базовых (нерасширенная) стоимость,
данная методика может дать удивительные результаты.
для других идей, смотрите мой ответ на аналогичный вопрос здесь: как разбить определение переменной на несколько строк в файле Makefile без пробелов?
более длинную обработку вариантов продолжения линии можно найти в моя статья " GNU Make line continuations": http://drmikehenry.com/gnu-make-line-continuations/
об этом только вчера спросили:Как разбить определение переменной на несколько строк в файле Makefile без пробелов?
короткий ответ-Нет, это невозможно сделать. Такое поведение требуется стандартом POSIX для make.
все, что вы можете сделать, это попробовать постобработку строки, чтобы удалить пробелы с помощью $(subst ...)
или аналогичные.