Использование символа табуляции в Makefile $ (info ...) - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы добавить вкладки специально к тексту stdout в make-файле.Я попытался поместить вкладки непосредственно в текст, а также с помощью команды \ t, и ни одна из них не работает.

Я всегда мог добиться того же с пробелами, но это просто раздражает.

$(info test text with tabs)

вкладки полностью удаляются на выходе

$(info \ttest text)

становится: "\ ttest text" на выходе

Есть ли разумный способ сделатьэтот?Я знаю, что могу сделать это с

@echo -e "\tNow the tabs work!"

Однако я пытался избавиться от использования echos.

Спасибо

edit:

Я ошибся насчет использования пробелов - они просто удаляются на выходе точно так же, как вставленные вкладки.

1 Ответ

0 голосов
/ 20 декабря 2018

создает строки строк перед их использованием в качестве аргументов различных команд или операторов.Итак, давайте сначала определим переменную, содержащую ... ничего, используйте ее, чтобы определить переменную, содержащую вкладку, и используйте эту переменную при необходимости:

$ cat Makefile
NULL :=
TAB  := $(NULL)<tab>$(NULL)

all:
    $(info X$(TAB)X)

$ make
X    X
make: 'all' is up to date.

Я использовал <tab>, чтобы показать, где символ табуляции долженидти.Конечно, вместо этого используйте реальный символ табуляции.Обратите внимание, что одного NULL достаточно для того, что вы хотите:

$ cat Makefile
NULL :=

all:
    $(info $(NULL)<tab>X)

$ make
    X

Но иметь переменную TAB может быть более удобно.

Обратите внимание, что переменные make могут иметь очень странные имена,Если вы предпочитаете называть переменную \t вместо TAB, вы можете:

$ cat Makefile
NULL :=
\t   := $(NULL)<tab>$(NULL)

all:
    $(info X$(\t)X)

$ make
X    X
make: 'all' is up to date.

Вы даже можете определить \n для конца строки:

$ cat Makefile
NULL :=
\t   := $(NULL)<tab>$(NULL)
define \n


endef

all:
    $(info X$(\t)X$(\n)Y$(\t)Y)

$ make
X    X
Y    Y
make: 'all' is up to date.

Причину, по которой нам нужны две пустые строки в define-endef, можно найти в GNU make manual :

Значение в обычном присваивании не может содержать символ новой строки;но символы новой строки, разделяющие строки значения в определении, становятся частью значения переменной (за исключением последнего символа новой строки, который предшествует endef и не считается частью значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...