Makefile: 4: *** отсутствует разделитель. Стоп
Это мой make файл:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll [email protected] $<
clean :
\rm -fr ll
Когда я пытаюсь make clean
или make make
, я получаю эту ошибку:
:makefile:4: *** missing separator. Stop.
Как я могу это исправить?
Ответы
Ответ 1
makefile имеет очень глупую связь с вкладками, все действия каждого правила определяются вкладками...... и никакие 4 пробела не создают вкладки, только вкладка делает вкладку...
чтобы проверить, я использую команду cat -e -t -v makefile_name
Он показывает наличие вкладок с ^I
и окончаний строк с $
обоими важны для обеспечения правильного завершения зависимостей, а вкладки отмечают действие для правил, чтобы их можно было легко идентифицировать с помощью утилиты make.....
Пример:
Kaizen ~/so_test $ cat -e -t -v mk.t
all:ll$ ## here the $ is end of line ...
$
ll:ll.c $
^Igcc -c -Wall -Werror -02 c.c ll.c -o ll [email protected] $<$
## the ^I above means a tab was there before the action part, so this line is ok .
$
clean :$
\rm -fr ll$
## see here there is no ^I which means , tab is not present ....
## in this case you need to open the file again and edit/ensure a tab
## starts the action part
надеюсь это поможет !!
Ответ 2
Вы всегда должны писать команду после "вкладки", а не пробела.
Это относится к строке "gcc" (строка № 4) в вашем случае. Вам нужно вставить вкладку перед gcc.
Также замените \rm -fr ll на "rm -fr ll". Вставьте вкладки перед этой командой.
Ответ 3
В VS-коде просто нажмите "Пробел: 4" в правом углу и измените его на вкладку при редактировании Makefile.
Ответ 4
Его довольно старый вопрос, но все же я хотел бы сказать еще об одном варианте с помощью редактора vi/vim
для визуализации вкладок. Если у вас установлен vi/vim
, откройте Makefile
(например, vim Makefile
) и введите :set list
. Это покажет количество вкладок, вставленных, как показано ниже,
%-linux: force$
^[email protected] [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected] legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected]; \$
^Ifi$
^Icd [email protected];make$
Ответ 5
Ключевым моментом был "HARD TAB"
1. Убедитесь, что вы использовали TAB вместо пробелов
2. Проверьте свой .vimrc для "set tabstop = X"
Ответ 6
Это связано с тем, что табуляция заменяется пробелами.
Чтобы отключить эту функцию, перейдите в
gedit- > Edit- > Настройки- > редактор
и удалите проверку для
" заменить вкладку пробелом"
Ответ 7
Если кто-либо из вас использует продукт от Intellij, решение для этого следующее:
- Перейдите в "Настройки"> "Редактор"> "Стиль кода".
- здесь вам нужно выбрать тип файла, связанный с вашей проблемой. Но, скорее всего, вам нужно выбрать
Other File Types
. - В открывшейся вкладке установите флажок
Use tab character
и будьте осторожны, значения Tab size
Use tab character
и Indent
должны быть 4.
Ответ 8
Если вы используете mcedit для редактирования make файла. Вы должны увидеть следующую отметку. ![enter image description here]()
Ответ 9
Решение для PyCharm
было бы установить плагин Makefile support
:
- Открыть
Preferences
(cmd + ,
) - Перейти к
Plugins
→ Marketplace
- Найдите
Makefile support
, установите и перезапустите IDE.
Это должно решить проблему и предоставить синтаксис для make файла.
Ответ 10
Использование .editorconfig
для .editorconfig
исправления вкладок:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab