создает строки строк перед их использованием в качестве аргументов различных команд или операторов.Итак, давайте сначала определим переменную, содержащую ... ничего, используйте ее, чтобы определить переменную, содержащую вкладку, и используйте эту переменную при необходимости:
$ 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 и не считается частью значения).