Вопрос:
Это мой make файл:
all:ll ll:ll.c gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $< clean : rm -fr ll
Когда я пытаюсь make clean или make make, я получаю эту ошибку:
:makefile:4: *** missing separator. Stop.
Как я могу это исправить?
Лучший ответ:
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 $@ $<$ ## 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
надеюсь это поможет !!
Ответ №1
Вы всегда должны писать команду после “вкладки”, а не пробела.
Это относится к строке “gcc” (строка № 4) в вашем случае. Вам нужно вставить вкладку перед gcc.
Также замените rm -fr ll на “rm -fr ll”. Вставьте вкладки перед этой командой.
Ответ №2
В VS-коде просто нажмите “Пробел: 4” в правом углу и измените его на вкладку при редактировании Makefile.
Ответ №3
Его довольно старый вопрос, но все же я хотел бы сказать еще об одном варианте с помощью редактора vi/vim для визуализации вкладок. Если у вас установлен vi/vim, откройте Makefile (например, vim Makefile) и введите :set list. Это покажет количество вкладок, вставленных, как показано ниже,
%-linux: force$ ^I@if [ «$(GCC_VERSION)» = «2.96» ] ; then $ ^I^Iecho ===== Generating build tree for legacy $@ architecture =====; $ ^I^I$(CONFIGURE) $(CWD) $@ legacy; $ ^Ielse $ ^I^Iecho ===== Generating build tree for $@ architecture =====; $ ^I^I$(CONFIGURE) $(CWD) $@; $ ^Ifi$ ^Icd build-$@;make$ Ответ №4
Ключевым моментом был “HARD TAB”
1. Убедитесь, что вы использовали TAB вместо пробелов
2. Проверьте свой .vimrc для “set tabstop = X”
Ответ №5
Это связано с тем, что табуляция заменяется пробелами.
Чтобы отключить эту функцию, перейдите в
gedit- > Edit- > Настройки- > редактор
и удалите проверку для
“ заменить вкладку пробелом”
Ответ №6
Если кто-либо из вас использует продукт от Intellij, решение для этого следующее:
- Перейдите в “Настройки”> “Редактор”> “Стиль кода”.
- здесь вам нужно выбрать тип файла, связанный с вашей проблемой. Но, скорее всего, вам нужно выбрать Other File Types.
- В открывшейся вкладке установите флажок Use tab character и будьте осторожны, значения Tab size Use tab character и Indent должны быть 4.
Ответ №7
Если вы используете mcedit для редактирования make файла. Вы должны увидеть следующую отметку.
Ответ №8
Решение для PyCharm было бы установить плагин Makefile support:
- Открыть Preferences (cmd + ,)
- Перейти к Plugins → Marketplace
- Найдите Makefile support, установите и перезапустите IDE.
Это должно решить проблему и предоставить синтаксис для make файла.
Ответ №9
Использование .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