Какой символ используется для отступа в рецепте правила файла Make?

Какой символ используется для отступа в рецепте правила файла Make?

Я использую gnu make и в Makefile, который у меня есть, я вижу следующее правило. Я хочу добавить похожее правило с рецептом, но когда я добавляю правило и его рецепт на следующей строке, давая табуляцию или пробел для рецепта, я получаю ошибку make.

dummy :
    @echo $(OBJS)

Когда я включил команду vim :set list, я увидел:

dummy :$
^I@echo $(OBJS)$

Какие именно символы находятся перед строкой рецепта (вторая строка), делая отступ от начала строки?

Как ввести их с помощью клавиатуры (без необходимости копировать и вставлять существующее правило, а затем изменять его?

Где я могу найти информацию о различных пробелах/отступах, которые можно использовать при создании Makefile с самого начала, вручную (не с помощью automake или другого инструмента, созданного makefile)?

решение1

Рецепты в makefileдолжендолжен предшествовать один стандартный tabсимвол и ничего больше.

^Iпредставляет собой представление символа табуляции (см. таблицу в Википедии)ASCIIстраница), и поэтому это должно быть правильно.

Таким образом, вы сможете ввести его с помощью Tabили Ctrl+ I.
(при условии, что они не переназначены программным обеспечением)


Редактировать

При дальнейшем расследовании выяснилось, что выможетизменить символ, который должен предшествовать всем строкам рецепта на вкладке, установив.RECIPEPREFIX специальная переменная.

Если это значение определено в вашем makefile, все рецептыпослев определении необходимо использовать этот символ вместо символа табуляции.

решение2

После выбора некоторых указаний из ответа, данного DMA57361 выше, и еще некоторых манипуляций, я заметил, что давным-давно в моем .vimrc у меня была эта команда set expandtab(она заменяет табуляции пробелами), и я использую vim.

Это портило символ Tab, который я вводил в правилах Makefile. Комментирование этой строки в .vimrc помогло, и у меня это работает.

решение3

В свете принятого ответа: рецепты должны предваряться символом tab, который автоматически заменяется, если set expandtabвключен в вашем .vimrc. Перезапись вашего .RECIPEPREFIXне рекомендуется, так как это нарушает make-файлы в кодовых базах, которые вы скачали. Наивный подход заключается в том, чтобы просто удалить set expandtabиз вашей конфигурации, но вы можете обойти это, добавив строку

autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab.

Это отключается expandtabтолько при редактировании make-файла.

Связанный контент